我最近得到了一个旧的XML over HTTP API。它的响应类型很少,所有响应都没有命名空间或类型属性。它们都具有相同的根节点,然后是不同的子节点集。
java中有没有办法让UnMarshall这样的XML?这就像使用子节点作为鉴别字段。下面给出了两个样本响应。
<Response>
<A1/>
<A2/>
</Response>
<Response>
<B1/>
<B2/>
</Response>
答案 0 :(得分:0)
最好的方法实际上取决于你想做什么。如果您只想解组数据,可以使用JAXB定义模型,例如,它包含所有潜在的子元素。然后,当您解组实例文档时,只有文档中实际存在的子元素才会有值。
如果您想要为不同的响应变体分别使用单独的模型,那么最好的方法是在开始时使用BufferedInputStream并调用mark(),然后使用诸如XMLStreamReader之类的pull解析器来读取足够的文档以确定实际响应类型。然后,您可以将流重置()到文档的开头,并使用具有适当数据模型的JAXB重新开始。