在一个文件中使用JAXB表示多个根XML元素

时间:2016-01-04 11:00:06

标签: java xml jaxb marshalling unmarshalling

考虑包含以下内容的输入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用于包含单个根元素的文件,但是当输入文件具有上面给出的多个根元素时,如何进行解组呢?

4 个答案:

答案 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"));