XML 基于子节点的 UnMarshalling

XML UnMarshalling based on child nodes

我最近通过 HTTP API 得到了一个旧 XML。它的响应类型很少,而且所有这些响应都没有命名空间或类型属性。它们都有相同的根节点和不同的子节点集。

在 java 中有没有办法取消编组这样的 XMLs ?这就像使用子节点作为鉴别器字段。下面给出了两个示例响应。

<Response>
<A1/>
<A2/>
</Response>

<Response>
<B1/>
<B2/>
</Response>

最佳方法实际上取决于您想做什么。如果您只想解组数据,您可以使用 JAXB 定义一个模型,例如,它包括所有潜在的子元素。然后,当您解组实例文档时,只有文档中实际存在的子元素才会有值。

如果您希望为不同的响应变化使用单独的模型,您最好的方法是使用 BufferedInputStream 并在开始时调用 mark(),然后使用 XMLStreamReader 等拉式解析器读取足够的文档以确定实际响应类型。然后您可以将流 reset() 到文档的开头并重新开始使用具有适当数据模型的 JAXB。