NullPointerException beim Auslesen

Status
Nicht offen für weitere Antworten.

pyr0t0n

Aktives Mitglied
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)

Code:
<?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.

Code:
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
 
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:

Code:
<?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:

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ß
 
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

Code:
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.
 
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
 
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.
 
nein das ist der äußere tag ders einmal pro datei da. nur anscheind müssen diese XSI klamotten da drin stehen bleiben
 
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

Code:
    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.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben