2012-03-27 6 views
3

Ich hatte gehofft, das folgende würde in StAX parseable sein,Parsing mehrere XML-Fragmente mit Stax

<something a="b"/> 
<something a="b"/> 

Aber es Drosseln, wenn Sie das zweite Element erreichen. Da es kein gemeinsames Wurzelelement gibt. (Ich bin nicht sicher, warum ein Pull-Parser sich um dieses spezielle Problem kümmert ... auf jeden Fall ...)

Ich kann ein Root-Element, z. Guava:

InputSupplier<Reader> join = CharStreams.join(
      newReaderSupplier("<root>"), 
      newReaderSupplier(new File("...")), 
      newReaderSupplier("</root>")); 

    XMLInputFactory xif = XMLInputFactory.newInstance(); 
    XMLStreamReader xsr = xif.createXMLStreamReader(join.getInput()); 
    xsr.nextTag(); // Skip the fake root 

Also meine Frage ist nur: Gibt es eine Möglichkeit, diesen Hack zu vermeiden? Ein "Fragment" -Modus, in den ich den Parser einfügen kann?

Antwort

2

Nein. Die StAX-API unterstützt keine Fragmente. Ein XMLStreamReader ist für genau ein XML-Dokument geeignet. Jedoch Ihre „Hack“ ist gar nicht so schlecht ...

+0

Ok, danke Chris.Ich denke, was auch immer Performance-Verlust ist in meinem Kontext akzeptabel, ich war einfach irritiert zu finden, dass ich es brauchte. :-) – Iain

1

Gemäß der XML-Spezifikation muss ein XML-Dokument ein einzelnes Stammelement aufweisen, andernfalls ist es nicht korrekt formatiert. Also ist Ihr so ​​genanntes Hack kein Hack, es ist der beste Weg, um das Dokument zu reparieren ....