【问题标题】:How to get elements from XPath in Java如何在 Java 中从 XPath 中获取元素
【发布时间】:2011-05-17 07:57:21
【问题描述】:

我想从 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?) 但该链接仅显示如何选择第一个节点。

【问题讨论】:

    标签: java xpath xom


    【解决方案1】:

    在结果中的第一个元素上调用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>
    

    【讨论】:

    • 你在哪里呆了这么久:) +50 4 U
    【解决方案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();
    

    这不是你想要的。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我想获取属性但不知道怎么做??和其余的值,现在得到Nodes location = doc.query("//location[location_name='"+ locationName +"']/*"); location.get(7).getValue();
      • 好的,但是如何获取选中的节点??
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      • 2017-05-20
      • 2017-08-20
      • 2011-07-13
      • 2021-12-13
      • 1970-01-01
      相关资源
      最近更新 更多