2016-02-25 40 views
2

最近我通过HTTP API获得了一个旧的XML。它的响应类型很少,所有这些响应都没有名称空间或类型属性。它们都有相同的根节点,然后有不同的子节点集。基于子节点的XML UnMarshalling

有没有办法在Java到UnMarshall这样的XML?这将像使用子节点作为鉴别器字段。下面给出了两个样本回答。

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

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

回答

0

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

如果您希望针对不同的响应变体分别创建模型,最好的方法是在开始时使用BufferedInputStream并调用mark(),然后使用XMLStreamReader等拉解析器读取足够的文档以确定实际的响应类型。然后,您可以将流重置()到文档的开始处,然后使用适当的数据模型重新开始使用JAXB。