# NullPointerException beim Auslesen



## pyr0t0n (5. Mai 2008)

Aloah,

es ist mal wieder soweit ich brauche eure Hilfe. Wird nur ein kleiner Fehler sein aber ich komme nicht drauf. Also ich habe folgende Datei mit dem Inhalt (nur ausschnitt sind ca 1000 zeilen)


```
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<TrainingCenterDatabase xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd">

  <Activities>
    <Activity Sport="Biking">
      <Id>2008-03-29T12:44:27Z</Id>
      <Lap StartTime="2008-03-29T12:44:27Z">
        <TotalTimeSeconds>1537.9200000</TotalTimeSeconds>
        <DistanceMeters>10000.0000000</DistanceMeters>
        <MaximumSpeed>10.4699993</MaximumSpeed>
        <Calories>347</Calories>
```

so nun will ich die Id auslesen und in der Konsole anzeigen lassen, das soll dann über diesen bsp Code den ich zum Probieren benutzen funktionieren.


```
public class Main {

    public String filename = "C:\\test.tcx";
    
    public Main()
    {
        try {
            Document doc = new SAXBuilder().build(filename);
            Element TrCeDb = doc.getRootElement();
            Element activities = TrCeDb.getChild("Activities");
            Element activity = activities.getChild("Activity");
            System.out.println(activity.getChild("Id").getText());
        } catch (JDOMException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    public static void main(String[] args) {
        Main h = new Main();
    }
}
```

Und ich kriege hier immer eine NullpointerException bei Element activity = activities.getChild("Activity");  hier Zeile 11

Ich weis nicht warum und hoffe ihr könnt mir Helfen.

Mit freundlichen Grüßen
pyr0


----------



## Java_IRL (5. Mai 2008)

Hi..

ich kann dir zwar nicht wirklich das Problem lösen, aber dich vielleicht ein Stück weiter bringen.

Das Problem des ganzen ist die zweite Zeile in deiner Datei:


```
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<TrainingCenterDatabase xmlns="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2 http://www.garmin.com/xmlschemas/TrainingCenterDatabasev2.xsd">

  <Activities>
    <Activity Sport="Biking">
      <Id>2008-03-29T12:44:27Z</Id>
      <Lap StartTime="2008-03-29T12:44:27Z">
        <TotalTimeSeconds>1537.9200000</TotalTimeSeconds>
        <DistanceMeters>10000.0000000</DistanceMeters>
        <MaximumSpeed>10.4699993</MaximumSpeed>
        <Calories>347</Calories>
```

Sieht die Datei wie folgt aus, funktioniert dein Code:


```
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<TrainingCenterDatabase>

  <Activities>
    <Activity Sport="Biking">
      <Id>2008-03-29T12:44:27Z</Id>
      <Lap StartTime="2008-03-29T12:44:27Z">
        <TotalTimeSeconds>1537.9200000</TotalTimeSeconds>
        <DistanceMeters>10000.0000000</DistanceMeters>
        <MaximumSpeed>10.4699993</MaximumSpeed>
        <Calories>347</Calories>
```

Vielleicht hat's ja geholfen.

Gruß


----------



## pyr0t0n (5. Mai 2008)

komisch.... problem ist halt das ich die datei so bekomme

gibts da ne möglichkeit das irgendwie so umzubauen das es funktioniert ?

EDIT: Stimmt so auch net habs bei mir auch nochmal probiert dann krieg ich folgenden fehler


```
SCHWERWIEGEND: null
org.jdom.input.JDOMParseException: Error on line 12 of document file:///C:/test.tcx: The prefix "xsi" for attribute "xsi:type" associated with an element type "AverageHeartRateBpm" is not bound.
        at org.jdom.input.SAXBuilder.build(SAXBuilder.java:501)
        at org.jdom.input.SAXBuilder.build(SAXBuilder.java:928)
        at tcxconverter.Main.<init>(Main.java:30)
        at tcxconverter.Main.main(Main.java:42)
Caused by: org.xml.sax.SAXParseException: The prefix "xsi" for attribute "xsi:type" associated with an element type "AverageHeartRateBpm" is not bound.
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:334)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2740)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
        at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
        ... 3 more
Caused by: org.xml.sax.SAXParseException: The prefix "xsi" for attribute "xsi:type" associated with an element type "AverageHeartRateBpm" is not bound.
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
        at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
        at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:334)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2740)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
        at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
        at org.jdom.input.SAXBuilder.build(SAXBuilder.java:489)
        at org.jdom.input.SAXBuilder.build(SAXBuilder.java:928)
        at tcxconverter.Main.<init>(Main.java:30)
        at tcxconverter.Main.main(Main.java:42)
```

EDIT2: Naja ok wenn ich den kleinen geposteten teil als datei nehme gehts, nimm ich aber meine ganze komm ich auf den oben genannten fehler.


----------



## Escorter (6. Mai 2008)

Das Peroblem ist, dass er die angegebenen Pfade zur Überprüfung der Datei nicht finden kann.

Du könnstest die ersten zwei Zeilen der Datei vor dem parsen verändern, dass die Zeile angepasst ist und dann in der von Java_IRL beschriebenen Form ist.

Löst das dein Problem?

Gruß,
Esco


----------



## pyr0t0n (6. Mai 2008)

problem ist ja wenn ich wie oben beschrieben diese lange Zeile abändere tritt der fehler weiter unten auf und er sagt mir das er diese XSI klamotten in der langen zeile nicht findet.


----------



## Java_IRL (6. Mai 2008)

Kommt denn dieser <TrainingCenterDatabase> - Tag in deiner Datei nochmal vor ?


----------



## pyr0t0n (6. Mai 2008)

nein das ist der äußere tag ders einmal pro datei da. nur anscheind müssen diese XSI klamotten da drin stehen bleiben


----------



## Guest (7. Mai 2008)

denke mal ich mchs dann bisschen anders ich finde einfach keine lösung dazu habe mir nun folgende methode geschrieben um die Tags um die daten die ich brauche zu entfernen 


```
public String tagsEntfernen(String str)
    {
        String tmp = "";
        tmp = str.substring(str.indexOf(">")+1, str.indexOf("<", 1));
        return tmp;
    }
```

und Arbeite dann mit index nummern da alle Dateien ja gleich sind. Lese die datei halt in eine Liste ein lösche alle leeren Zeilen raus und kann dann über die vorher festgelegten index nummern die für mich wichtigen daten auslesen ^^

bisschen umständlich aber ich weis es derzeit nicht anders.


----------



## pyr0t0n (7. Mai 2008)

sry vergessen einzuloggen makiere aber mal als gelöst.


----------

