Java JAXB从XML中检索单个元素
我最近使用Java JAXB从XML中检索单个元素,java,xml,jaxb,Java,Xml,Jaxb,我最近使用xjc工具基于XSD创建了一系列对象。我遇到的问题是,我从一个看起来像这样的源接收XML: <foos> </foos> <foo> </foo> <foo_detail_1> </foo_detail_1> <foo_detail_2> </foo_detail_2> Foo foo = (Foo)um.unmarshal("myXML.xml"); Foo_De
xjc
工具基于XSD创建了一系列对象。我遇到的问题是,我从一个看起来像这样的源接收XML:
<foos>
</foos>
<foo>
</foo>
<foo_detail_1>
</foo_detail_1>
<foo_detail_2>
</foo_detail_2>
Foo foo = (Foo)um.unmarshal("myXML.xml");
Foo_Detail_1 fd = (Foo_Detail_1)um.unmarshal("myXML.xml");
或者这更像是一个利用XPath填充这些属性的练习,如果是的话,正确的方法是什么
您可以使用StAXXMLStreamReader
解析XML,然后前进到foos
元素并解组foos
的实例。然后将XMLStreamReader
前进到foo
元素并解组foo
的实例,依此类推
了解更多信息
您可以创建一个对应于根元素的包装器对象,然后取消包装该对象的实例并从中获取单个对象。我更希望这是一次完成的。是否可以避免多次遍历整个文档?FWIW整个文件都能放进去memory@Woot4Moo-StAX解析器只遍历文档一次。或者,您可以创建一个包含所有单个对象的根对象。因此,如果我创建包装器节点,我只需执行
wrapper w=(wrapper)unmarshall(myXml.xml)
,然后使用对象集合?@Woot4Moo-它不需要是一个集合。包装器类每个元素名可以有一个属性。所以本质上我只是拆开包装器,从内部获取单个元素。但是包装器的内部表示不需要是一系列集合吗,或者我遗漏了什么?