2016-03-30 4 views
0

Ich würde erwarten, dass der XmlStreamReader am Anfang des Dokuments (natürlich) starten und dann zum Stamm des XML-Dokuments springen, wenn ich next() darauf anrufe. Allerdings sehe ich es erschreckend, dass es zum ersten Tag springt, in dem sich Text befindet, und immer den Stamm und oft (???) das zweite Tag weglässt.XmlStreamReader verhält sich zufällig beim Start

das Dokument wie folgt aussieht:

<?xml version="1.0" encoding="UTF-8"?> 
<objektliste xmlns="http://www.pixelboxx.de/ns/erco/translations/1.0"> 
    <uebersetzungen key="122671" attribute="7505"> 
    <thumbnail>abrakadabra.jpg</thumbnail> 
    <text sprache="1031">We like the abla abla abla</text> 
    <text sprache="2057">We like the spoonBlaBlaBla[en]</text> 
    <text sprache="1036">Wicher</text> 
    </uebersetzungen> 
    <uebersetzungen key="122679" attribute="7505"> 
    <thumbnail>122679.jpg</thumbnail> 
    <text sprache="1031">Kiefer</text> 
    <text sprache="1036">franek</text> 
    </uebersetzungen> 
</objektliste> 

Bin ich verrückt werde, wird mein Eklipse verrückt oder ich nicht etwas offensichtlich sehen? Das Programm scheint immer "objektliste" wegzulassen und springt normalerweise zuerst zu "thumbnail", obwohl es sich in früheren Debug-Sitzungen anscheinend noch zufälliger verhalten hat. Hilfe !!!

btw, ist der Code sehr einfach:

XMLStreamReader streamReader = factory.createXMLStreamReader(is); 

    while(streamReader.hasNext()) 
    { 
//event type 7 here, everything seems to be ok. 
     streamReader.next(); 
//bang! armaggeddon - skips the root, jumps to thumbnail. 
+0

offenbar streamReader.getLocalName() bewirkt, dass bei Mine bewegt sich die Stream zum nächsten Element! ist es ein bekannter Fehler ??? – Greg

Antwort

1

Der Aufruf von streamReader.next() wird Ereignis basiert.

Die next() -Methode bewirkt, dass der Leser das nächste Parse-Ereignis liest. Die Methode next() gibt eine Ganzzahl zurück, die den gerade gelesenen Ereignistyp angibt.

Der Ereignistyp kann mit getEventType() ermittelt werden.

Ich denke, dass Sie Probleme mit den Endelementereignissen auftreten sehen und Sie nicht erwartet haben.

Verwendung des folgenden Codes, sehe ich die richtige Reihenfolge, wie erwartet, das verarbeitet wird:

XMLInputFactory factory = XMLInputFactory.newInstance(); 
XMLStreamReader streamReader = factory.createXMLStreamReader(is); 

while(streamReader.hasNext()) { 
    int eventType = streamReader.next(); 
    switch (eventType) { 
     case XMLStreamReader.START_ELEMENT: 
      String elementName = streamReader.getLocalName(); 
      System.out.println("Element: " + elementName); 
      break; 
     case XMLStreamReader.END_ELEMENT: 
      break; 
    } 
} 

, die die erwartete Ausgabe erzeugt:

Element: objektliste 
Element: uebersetzungen 
Element: thumbnail 
Element: text 
Element: text 
Element: text 
Element: uebersetzungen 
Element: thumbnail 
Element: text 
Element: text 
Verwandte Themen