Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB从XML中检索单个元素_Java_Xml_Jaxb - Fatal编程技术网

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填充这些属性的练习,如果是的话,正确的方法是什么

您可以使用StAX
XMLStreamReader
解析XML,然后前进到
foos
元素并解组
foos
的实例。然后将
XMLStreamReader
前进到
foo
元素并解组
foo
的实例,依此类推

了解更多信息

选项#2-创建包装器对象


您可以创建一个对应于根元素的包装器对象,然后取消包装该对象的实例并从中获取单个对象。

我更希望这是一次完成的。是否可以避免多次遍历整个文档?FWIW整个文件都能放进去memory@Woot4Moo-StAX解析器只遍历文档一次。或者,您可以创建一个包含所有单个对象的根对象。因此,如果我创建包装器节点,我只需执行
wrapper w=(wrapper)unmarshall(myXml.xml)
,然后使用对象集合?@Woot4Moo-它不需要是一个集合。包装器类每个元素名可以有一个属性。所以本质上我只是拆开包装器,从内部获取单个元素。但是包装器的内部表示不需要是一系列集合吗,或者我遗漏了什么?