2016-02-25 41 views
2

最近我通過HTTP API獲得了一箇舊的XML。它的響應類型很少,所有這些響應都沒有名稱空間或類型屬性。它們都有相同的根節點,然後有不同的子節點集。基於子節點的XML UnMarshalling

有沒有辦法在Java到UnMarshall這樣的XML?這將像使用子節點作爲鑑別器字段。下面給出了兩個樣本回答。

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

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

回答

0

最好的方法真的取決於你想要做什麼。如果您只想解組數據,則可以使用JAXB定義模型,例如,它包含所有潛在的子元素。然後,當您解組一個實例文檔時,只有實際存在於文檔中的子元素纔會具有值。

如果您希望針對不同的響應變體分別創建模型,最好的方法是在開始時使用BufferedInputStream並調用mark(),然後使用XMLStreamReader等拉解析器讀取足夠的文檔以確定實際的響應類型。然後,您可以將流重置()到文檔的開始處,然後使用適當的數據模型重新開始使用JAXB。