java - XPath 查询返回重复节点

标签 java xml xpath

我有一个正在 Java 中处理的 SOAP 响应。它有一个元素和几个不同的子元素。我使用以下代码尝试获取所有绑定(bind)节点并查找哪个节点具有值为 ACTIVE 的子标签。初始评估语句返回的 NodeList 包含 4 个节点,这是 SOAP 响应中子节点的正确数量,但它们都是第一个元素的重复项。这是代码:

NodeList nodes = (NodeList)xpath.evaluate("//:bond", doc, XPathConstants.NODESET);
for(int i = 0; i < nodes.getLength(); i++){
    HashMap<String, String> map = new HashMap<String, String>();
    Element bond = (Element)nodes.item(i);

    // Get only active bonds
    String status = xpath.evaluate("//:status", bond);
    String id = xpath.evaluate("//:instrumentId", bond);

    if(!status.equals("ACTIVE"))
        continue;

    map.put("isin", xpath.evaluate(":isin", bond));
    map.put("cusip", xpath.evaluate(":cusip", bond));   
}

感谢您的帮助, 贾里德

最佳答案

您直接问题的答案是像 //:status 这样的表达式将忽略您传入的节点,并从文档的根开始。

但是,可能有比您现有的解决方案更简单的解决方案,即使用 XPath 将测试应用到节点。我认为这应该可行,尽管它可能包含拼写错误(特别是,我不记得 text() 是否可以独立存在或必须在谓词表达式中使用):

//:bond/:status[text()='ACTIVE']/..

关于java - XPath 查询返回重复节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5979810/

相关文章:

google-sheets - 谷歌表 : IMPORTXML from Yahoo Finance

java - 为什么 PermSize 和 MaxPermSize 的设置值和实际值不同?

Java重复方法合并

android - 在 RecyclerView 中展开 View 不能正确设置动画

java - android 实现自定义操作栏的问题

xml - 如何在 GtkBuilder 的 XML *.ui 文件中使用 GTK+3 GtkImage

java - jsf primefaces,更新时显示 itemLabel 而不是 itemvalue

Java:从 Hashtable<Integer,Hashtable<String,Object>> 获取对象值

javascript - 使用 JavaScript 和 XPath 从 DOM 中选择元素

xml - 如何在xsl:apply-templates select属性中使用或声明?