XPath-값과 동일한 요소 선택


110

Xpath에서 특정 값과 동일한 요소를 선택하고 싶습니다.

샘플 XML 데이터 :

<aaa id="11" >
    <aaa id="21" >
        <aaa id="31" ></aaa>
        <bbb id="32" >
            <aaa id="41" ></aaa>
            <bbb id="42" ></bbb>
            <ccc id="43" ></ccc>
            <ddd id="44" >qwerty</ddd>
            <ddd id="45" ></ddd>
            <ddd id="46" ></ddd>
        </bbb>
    </aaa>
    <bbb id="22" >
         <aaa id="33" >qwerty</aaa>
         <bbb id="34" ></bbb>
         <ccc id="35" ></ccc>
         <ddd id="36" ></ddd>
         <ddd id="37" ></ddd>
         <ddd id="38" ></ddd>
    </bbb>
    <ccc id="23" >qwerty</ccc>
    <ccc id="24" ></ccc>
 </aaa>

이제 XPath를 사용합니다.

//ccc[.='qwerty']

올바른 예상 결과를 얻습니다 .

Name    Value
ccc     qwerty

이제 XPath를 사용합니다.

//aaa[.='qwerty']

내가 얻을 예상치 못한 결과를 :

Name    Value
aaa      
aaa     qwerty

제가 특히 관심이 있는 것은 해당 값을 가진 요소 를 선택 하는 방법 입니다.

XPath :

//*[.='qwerty']

나는 매우 이상한 예기치 않은 결과를 얻습니다 .

Name    Value
aaa
bbb
ddd     qwerty
bbb     qwerty
aaa     qwerty
ccc     qwerty

누군가 이러한 결과를 설명하고 더 많은 예상 결과를 얻기 위해 XPath 표현식을 수정하는 방법을 설명 할 수 있습니까?


1
XPath . =는 XPath 와 다르기 때문 text() =입니다. 참조 텍스트 노드와 일치하는 문자열 값을 일치와 다른 이유를 알아.
kjhughes

답변:


178

XPath 사양. 요소 의 문자열 값 을 모든 텍스트 노드 하위 항목의 연결 (문서 순서)로 정의합니다 .

이것은 "이상한 결과"를 설명합니다.

아래 표현식을 사용하여 "더 나은"결과를 얻을 수 있습니다.

//*[text() = 'qwerty']

위의 코드는 값이 'qwerty'인 텍스트 노드 자식이 하나 이상있는 문서의 모든 요소를 ​​선택합니다.

//*[text() = 'qwerty' and not(text()[2])]

위는 텍스트 노드 자식이 하나만 있고 값이 'qwerty'인 문서의 모든 요소를 ​​선택합니다.


3
@iHeartGreek : 다행 이네요. 수락 / 투표는 어떻습니까? XPath에서 text()가능한 노드 테스트 중 하나입니다. 이는 "텍스트 노드입니까?"를 의미합니다. 다른 nodetest는 comment(), processing-instruction()또는 그냥 node()입니다.
Dimitre Novatchev

15

시험

//*[text()='qwerty']때문에 .당신입니다 현재 요소

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.