2011-05-12 14 views
0

私はJavaで処理しているSOAP応答を持っています。それはいくつかの異なる子要素を持つ要素を持っています。私は、すべてのボンドノードをつかみ、ACTIVEの値を持つ子タグを持つものを見つけるために、次のコードを使用しています。最初の評価文によって返されるNodeListには、SOAP応答内の子の正しい数である4つのノードが含まれますが、それらはすべて最初の要素の複製です。ここでは、コードは以下のとおりです。あなたの助けのためのXPathクエリが重複するノードを返します

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

は、あなたの即時の質問への答えは//:statusのような表現は、あなたが渡すノードを無視して、のルートから開始されるということです資料。

しかし、XPathを使用してノードにテストを適用すると、おそらく簡単な解決策が得られます。それはタイプミスが含まれているかもしれませんが、私は(特に、私はtext()は自分自身で立つことができるか、述語式で使用する必要があるかどうか覚えていないことができます)、これは動作するはずだと思う。確かに問題だった

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

おかげで、 。 //:bond [:status = 'ACTIVE'] 私は前にこれをやろうとしましたが、状態の前に愚かなコロンを残してしまったので動作しませんでした。 – Jared

関連する問題