Parsing multiple XML fragments with STaX

会有一股神秘感。 提交于 2019-12-10 10:13:53

问题


I was hoping the following would be parseable in StAX,

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

But it chokes when you reach the second element. As there is no common root element. (I'm not too sure why a pull parser cares about this particular issue... anyway...)

I can fake a root element, e.g. 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

So my question is just: Is there any way to avoid this hack? Some 'fragment' mode that I can put the parser into?


回答1:


Nope. The StAX API does not support fragments. A XMLStreamReader is suitable for exactly one XML document. However, your "hack" isn't that bad at all...




回答2:


The Woodstox StAX implementation does apparently support this: http://woodstox.codehaus.org/3.2.9/javadoc/com/ctc/wstx/api/WstxInputProperties.html#P_INPUT_PARSING_MODE

As it happens we are already using Woodstox in some places, but I didn't think to Google for Woodstox-specific options!




回答3:


According to XML spec, an XML document must have a single root element, or else it isn't wellformed. So your so called hack isn't a hack at all, it is the best way to fix up the document....



来源:https://stackoverflow.com/questions/9899099/parsing-multiple-xml-fragments-with-stax

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!