2013-05-30 102 views
2

我最近使用xjc工具基於XSD創建了一系列對象。我遇到的問題是,我從一個看起來像這樣的源接收XML:JAXB從XML檢索單個元素

<foos> 
</foos> 
<foo> 
</foo> 
<foo_detail_1> 
</foo_detail_1> 
<foo_detail_2> 
</foo_detail_2> 

這是不理想的。我的問題是,當我去解組XML時,我如何創建每個單獨的對象?這就像這樣:

Foo foo = (Foo)um.unmarshal("myXML.xml"); 
Foo_Detail_1 fd = (Foo_Detail_1)um.unmarshal("myXML.xml"); 

還是這更在利用XPath來填充這些屬性,如果有的話是什麼解決這個正確的方法練習?

回答

2

選項1 - 使用JAXB使用StAX

您可以用StAX的XMLStreamReader解析XML,然後前進到foos元素解組的Foos實例。然後將XMLStreamReader前移到foo元素並解組Foo的實例,依此類推。

更多信息

選項#2 - 創建一個包裝對象

您可以創建對應的根元素的包裝對象,然後解組一個實例並獲取該個體從它的對象。

+1

我寧願這樣做是在一次通過是否有可能防止不得不遍歷整個文件多次? FWIW整個文件將適合內存 – Woot4Moo

+0

@ Woot4Moo - StAX解析器只會遍歷文檔一次。或者,您可以創建一個保存所有單個對象的根對象。 –

+0

所以,如果我創建包裝節點,我可以只做'Wrapper w =(Wrapper)unmarshall(myXml.xml)'而不是玩對象集合? – Woot4Moo