考虑包含以下内容的输入XML文件:
<organization>
<director>
<fname>Dan</fname>
<lname>Schman</lname>
</director>
</organization>
<organization>
<director>
<fname>fan</fname>
<lname>Heman</lname>
</director>
</organization>
<organization>
<director>
<fname>Ban</fname>
<lname>Sheman</lname>
</director>
</organization>
是否可以使用JAXB解压缩具有多个根元素的输入文件?有没有更好的工具可以用来实现这个目标?
我熟悉将JAXB用于包含单个根元素的文件,但是当输入文件具有上面给出的多个根元素时,如何进行解组呢?
答案 0 :(得分:3)
您的输入&#34; XML&#34;文件不是有效的XML。 XML只有一个根元素。 JAXB只能解组有效的XML文件。
我建议使用有效的XML。
否则,您必须手动将文档拆分为多个有效的XML文档(可以在内存中)。 但是这种方法会导致您需要维护更多的代码。
答案 1 :(得分:1)
最简单的解决方案是将xml包装成一个像这样的大根元素
<root>
<organization>
...
</organization>
<organization>
...
</organization>
</root>
然后您可以使用XMLInputFactory
创建一个XMLStreamReader
循环每个organization
元素,并使用unmashaller方法解组每个元素:
yourUnmarshaller.unmarshal(XMLStreamReader reader);
答案 2 :(得分:1)
有效XML只有一个根元素。
编写一个小型预处理器,将您的输入几乎XML分成较小的有效XML文档。
答案 3 :(得分:0)
文件格式将如我的问题所述。它中有多个XML(但标签相同)。
我已经解决了这个问题,我一次只读取一条消息的XML文件,即<organization>...</organization>
成一个字符串然后将此字符串传递给unmarshaller
Organisation org = (Organisation) unmarshaller.unmarshal(new StringReader("xml string here"));