您好我想从xpath查询中获取数据
Element location = (Element) doc.query("//location[location_name='"+ locationName +"']/*").get(0).getDocument().getRootElement();
System.out.println(location.toXML());
Element loc = location.getFirstChildElement("location");
System.out.println(loc.getFirstChildElement("location_name").getValue());
但无论我选择什么,我总是得到1个节点(因为.get(0)
),但我不知道如何选择查询选择的节点。
我发现我应该将节点转换为Element(XOM getting attribute from Node?),但这里展示了如何选择第一个节点。
答案 0 :(得分:4)
在结果中的第一个元素上调用getParent()
:
Builder parse = new Builder();
Document xml = parse.build("/var/www/JAVA/toForum.xml");
System.out.println(xml.query("//location[@id=83]/*").get(0).getParent().toXML());
产生以下输出:
<location id="83">
<location_name>name</location_name>
<company_name>company a</company_name>
<machines>
<machine id="12">A</machine>
<machine id="312">B</machine>
</machines>
</location>
答案 1 :(得分:2)
您对getDocument()
的调用将返回整个XML文档。
对query()
的调用会返回一个Nodes
对象,该对象直接包含对您所追求的节点的引用。
如果您更改为
Element location = (Element)doc.query(
"//location[location_name='"+ locationName +"']/*").get(0);
System.out.println(location.getAttribute("location_name").getValue());
应该没问题
编辑(通过extraneon)
一些不值得回答的额外解释: 通过做
Element location =
(Element) doc.query("//location[location_name='"
+ locationName +"']/*").get(0)
.getDocument().getRootElement();
您搜索树并获取请求的节点。但是,然后在所需的元素上调用getDocument().getRootNode()
,这将为您提供文档的最上面的节点。
以上查询可以简化为:
Element location = (Element)doc.getRootElement();
这不是你想要的。
这有点像蹦极跳。你可以到达你需要的地方(元素)但是立即回到你来自的地方(根元素)。
答案 2 :(得分:0)
目前尚不清楚(至少对我来说)实际需要做些什么。从您的查询中,您应该获得与给定条件匹配的节点列表。您将获得NodeList,然后您可以迭代此NodeList并使用getNodeValue获取每个节点的内容。