2

我想从 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))。我不知道如何选择通过查询选择的节点。

我发现我应该将节点转换为元素,(XOM 从节点获取属性?)但链接只显示了如何选择第一个节点。

4

3 回答 3

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>
于 2011-06-07T17:03:58.523 回答
2

您进行的调用将getDocument()返回整个 XML 文档。

调用query()返回一个对象,该Nodes对象直接包含对您所追求的节点的引用。

如果您更改为

Element location = (Element)doc.query(
            "//location[location_name='"+ locationName +"']/*").get(0);

System.out.println(location.getAttribute("location_name").getValue());

应该没问题

编辑(通过外挂)

一些额外的解释本身不值得回答:通过做

Element location = 
  (Element) doc.query("//location[location_name='" 
                       + locationName +"']/*").get(0)
            .getDocument().getRootElement();

您搜索树并获取请求的节点。但是然后你调用getDocument().getRootNode()你想要的元素,它会给你文档的最上面的节点。

因此,上述查询可以简化为:

Element location = (Element)doc.getRootElement();

这不是你想要的。

这有点像蹦极跳。你去到你需要去的地方(元素),但立即回到你来自的地方(根元素)。

于 2011-06-03T07:54:18.733 回答
0

目前尚不清楚(至少对我而言)实际上必须做什么。从您的查询中,您应该获得与给定条件匹配的节点列表。您将获得 NodeList,然后您可以遍历此 NodeList 并使用 getNodeValue 获取每个节点的内容。

于 2011-05-17T08:12:00.817 回答