【问题标题】:Using JAXB for multiple root XML elements in one file将 JAXB 用于一个文件中的多个根 XML 元素
【发布时间】:2016-01-04 11:00:05
【问题描述】:

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

【问题讨论】:

    标签: java xml jaxb marshalling unmarshalling


    【解决方案1】:

    您输入的“XML”文件不是有效的 XML。 XML 只有一个根元素。 JAXB 只能解组有效的 XML 文件。

    我建议使用有效的 XML。

    否则您将不得不手动将文档拆分为多个有效的 XML 文档(可能在内存中)。 但这种方法会导致您需要维护更多代码。

    【讨论】:

      【解决方案2】:

      最简单的解决方案是将您的 xml 包装到一个像这样的大根元素中

      <root>
         <organization>
            ...
         </organization>
         <organization>
            ...
         </organization>
      </root>
      

      然后您可以使用XMLInputFactory 创建一个XMLStreamReader 也循环每个organization 元素并使用 unmashaller 方法解组每个元素:

      yourUnmarshaller.unmarshal(XMLStreamReader reader);
      

      【讨论】:

        【解决方案3】:

        有效的 XML 只有一个根元素。

        编写一个小型预处理器,将输入的几乎 XML 分块成更小的有效 XML 文档。

        【讨论】:

          【解决方案4】:

          文件格式将如我的问题中所述。它有多个 XML(但标签相同)。

          我已经解决了这个问题,我正在一次读取XML文件一条消息,即&lt;organization&gt;...&lt;/organization&gt;成一个字符串,然后将这个字符串传递给unmarshaller作为

             Organisation org = (Organisation) unmarshaller.unmarshal(new StringReader("xml string here"));
          

          【讨论】:

            猜你喜欢
            • 2015-05-13
            • 1970-01-01
            • 2011-07-16
            • 1970-01-01
            • 2021-11-27
            • 1970-01-01
            • 1970-01-01
            • 2011-10-08
            • 1970-01-01
            相关资源
            最近更新 更多