2016-07-22 2 views
2

내 XML 파일 내가 XPath를 아래로 시도 office="US"XPath에서 아무것도 선택하지 않는 이유는 무엇입니까?

조건과 함께 모든 classification-symbol 요소 값을 요구 조건 을 다음과 같이 값을 구문 분석 할

<classifications> 
    <classification sequence="1"> 
    <classification-scheme office="" scheme="CS" /> 
    <section>G</section> 
    <class>01</class> 
    <subclass>R</subclass> 
    <main-group>33</main-group> 
    <subgroup>365</subgroup> 
    <classification-value>I</classification-value> 
    </classification> 
    <classification sequence="2"> 
    <classification-scheme office="" scheme="CS" /> 
    <section>G</section> 
    <class>01</class> 
    <subclass>R</subclass> 
    <main-group>33</main-group> 
    <subgroup>3415</subgroup> 
    <classification-value>A</classification-value> 
    </classification> 
    <classification sequence="1"> 
    <classification-scheme office="US" scheme="UC" /> 
    <classification-symbol>324/300</classification-symbol> 
    </classification> 
    <classification sequence="2"> 
    <classification-scheme office="US" scheme="UC" /> 
    <classification-symbol>324/307</classification-symbol> 
    </classification>   
</classifications> 

,

NodeList usClassification = (NodeList)xPath.compile("//classifications//classification//classification-scheme[@office=\"US\"]//classification-symbol//text()").evaluate(xmlDocument, XPathConstants.NODESET); 

하지만, 빈 결과 집합이 나옵니다.

System.out.println(usClassification.getLength()); //its becomes zero 
+1

이런 식으로 "//"을 무차별 적으로 사용하지 않도록하십시오. 게으른 습관이고 같은 경로에서 네 번 할 때 성능이 심각하게 손상 될 수 있습니다. 특히 소스 문서가 큰 경우 특히 그렇습니다. –

+0

특히'''(하위 항목을 선택하는)와'/'(즉각적인 하위 항목을 선택하는) 사이의 기능적 차이는 XML과 관련이 없으므로 특히 그렇습니다. – kjhughes

답변

3

이 XPath를 대신 "기호"에서 "계획"에서 얻을 수 following-sibling 축 사용 REQU 같은

324/300 
324/307 

: US 동일 classification-scheme@office 속성 값 ested.

+0

감사합니다. – Prabu

3

classification-symbolclassification-scheme의 하위 항목이 아닙니다. 이들은 형제 인입니다.

/classifications/classification[classification-scheme/@office='US'] 
       /classification-symbol/text() 

classification 요소의 classification-symbol 텍스트를 선택합니다 (가독성을 용이하게하기 위해 두 줄에 기록)

//classifications/classification/classification-scheme[@office=\"US\"]/following-sibling::classification-symbol/text() 
+0

이것은 똑같이 잘 작동하는 다른 방법입니다 (+1). – kjhughes

관련 문제