使用STaX解析多个XML片段

时间:2012-03-27 23:20:34

标签: java xml xml-parsing stax

我希望以下内容可以在StAX中解析,

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

但是当你到达第二个元素时它会窒息。因为没有共同的根元素。 (我不太清楚为什么拉解析器会关心这个特殊问题......无论如何......)

我可以伪造根元素,例如番石榴:

    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

所以我的问题是:有没有办法避免这种黑客行为?我可以将解析器放入一些“片段”模式吗?

3 个答案:

答案 0 :(得分:2)

不。 StAX API不支持片段。 XMLStreamReader仅适用于一个XML文档。但是,你的“黑客”并没有那么糟糕......

答案 1 :(得分:1)

Woodstox StAX实现显然支持这一点:http://woodstox.codehaus.org/3.2.9/javadoc/com/ctc/wstx/api/WstxInputProperties.html#P_INPUT_PARSING_MODE

实际上我们已经在某些地方使用过Woodstox,但我没想到谷歌会选择特定于Woodstox的选项!

答案 2 :(得分:1)

根据XML规范,XML文档必须具有单个根元素,否则它不能很好地形成。所以你所谓的hack根本就不是黑客攻击,这是修复文档的最好方法....