XPath查询返回重复的节点

时间:2011-05-12 14:45:28

标签: java xml xpath

我有一个用Java处理的SOAP响应。它有一个带有几个不同子元素的元素。我正在使用以下代码尝试获取所有绑定节点,并找到哪个具有值为ACTIVE的子标记。初始evaluate语句返回的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));   
}

感谢您的帮助, 贾里德

1 个答案:

答案 0 :(得分:1)

您当前问题的答案是,像//:status这样的表达式会忽略您传入的节点,并从文档的根目录开始。

但是,通过使用XPath将测试应用于节点,可能比您获得的解决方案更容易。我认为这应该有效,虽然它可能包含拼写错误(特别是,我不记得text()是否可以独立存在或者必须在谓词表达式中使用):

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