2011-05-12 4 views
0

Java에서 처리중인 SOAP 응답이 있습니다. 여러 가지 하위 요소가있는 요소가 있습니다. 본드 노드를 모두 잡아서 어떤 태그에 ACTIVE 값을 가진 자식 태그가 있는지 찾으려면 다음 코드를 사용하고 있습니다. 초기 평가 문에 의해 반환 된 NodeList에는 네 개의 노드가 포함되어 있습니다.이 노드는 SOAP 응답에있는 올바른 자식 수이지만 첫 번째 요소의 모든 복제본입니다. 당신의 도움에 대한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)); 
} 

감사합니다, 자레드

즉각적인 질문에 대한 답변이 //:status 같은 표현은 당신이 통과 노드를 무시하고의 루트에서 시작하는 것입니다

답변

1

을 : 여기에 코드입니다 문서.

그러나 XPath를 사용하여 노드에 테스트를 적용하면 해결할 수있는 솔루션보다 쉽습니다. 나는 (특히, 내가 text() 자체에 설 수 또는 조건식에 사용해야하는지 여부를 기억할 수) 오타를 포함 할 수 있지만,이, 일을해야한다고 생각 :

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

감사합니다, 그것은 참으로 문제가 있었다 . 나는 다음과 같은 문자열로 작업하게했다 : // : bond [: status = 'ACTIVE'] 나는 이것을하기 위해 노력했지만, 상태 전에 바보 같은 콜론을 버려서 작동하지 않았다. – Jared

관련 문제