开发者

XPath query returns duplicate nodes

I have a SOAP response that I'm processing in Java. It has a element with several different child elements. I'm using the following code to try to grab all of the bond nodes and find which one has a child tag with a value of ACTIVE. The NodeList returned by the initial evaluate statement contains 4 nodes,开发者_JAVA百科 which is the correct number of children in the SOAP response, but they are all duplicates of the first element. Here is the code:

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));   
}

Thanks for your help, Jared


The answer to your immediate question is that expressions like //:status will ignore the node that you pass in, and start from the root of the document.

However, there's probably an easier solution than what you've got, by using XPath to apply the test to the node. I think this should work, although it might contain typos (in particular, I can't remember whether text() can stand on its own or must be used in a predicate expression):

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜