【问题标题】:Get attributes from nodelist using xpath in Java在 Java 中使用 xpath 从节点列表中获取属性
【发布时间】:2020-01-08 06:35:34
【问题描述】:

XML

    <Employees>
<Employee id="1" name="xyz">
<Employee id="2" name="abc">
</Employees>

我可以通过 xpath 表达式获取 Employee 节点列表

XPathExpression expr=xpath.compile("/Employees/Employee");
            NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

如何从列表中的每个节点获取属性id、name。

【问题讨论】:

    标签: java xml xpath attributes nodelist


    【解决方案1】:

    您不能要求单个列表返回 (id, name) 的 2 元组 但是你可以在两个单独的节点列表中拥有它:

    XPathExpression expr1 = xpath.compile("/Employees/Employee/@id");
    NodeList nodes1 = (NodeList) expr1.evaluate(doc, XPathConstants.NODESET);
    
    XPathExpression expr2 = xpath.compile("/Employees/Employee/@name");
    NodeList nodes2 = (NodeList) expr2.evaluate(doc, XPathConstants.NODESET);
    

    但是,如果拥有一个列表如此重要,则可以采取一些解决方法,例如将两个属性值连接成一个类似 csv 的字符串:

    XPathExpression expr = xpath.compile("concat(/Employees/Employee/@id, ';', /Employees/Employee/@name)");
    

    这将返回一个包含 2 个节点的列表:

    "1;xyz"
    "2;abc"
    

    【讨论】:

    • 感谢我最初对 Xpath 的理解是错误的。现在我明白了
    【解决方案2】:

    尝试将您的 xpath 表达式更改为

    /Employees/Employee/@id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 2015-08-22
      相关资源
      最近更新 更多