基于子节点的XML UnMarshalling

时间:2016-02-25 00:03:19

标签: java xml jaxb moxy

我最近得到了一个旧的XML over HTTP API。它的响应类型很少,所有响应都没有命名空间或类型属性。它们都具有相同的根节点,然后是不同的子节点集。

java中有没有办法让UnMarshall这样的XML?这就像使用子节点作为鉴别字段。下面给出了两个样本响应。

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

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

1 个答案:

答案 0 :(得分:0)

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

如果您想要为不同的响应变体分别使用单独的模型,那么最好的方法是在开始时使用BufferedInputStream并调用mark(),然后使用诸如XMLStreamReader之类的pull解析器来读取足够的文档以确定实际响应类型。然后,您可以将流重置()到文档的开头,并使用具有适当数据模型的JAXB重新开始。