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 표현식을 수정하는 방법을 설명 할 수 있습니까?
답변
XPath 사양. 요소 의 문자열 값 을 모든 텍스트 노드 하위 항목의 연결 (문서 순서)로 정의합니다 .
이것은 “이상한 결과”를 설명합니다.
아래 표현식을 사용하여 “더 나은”결과를 얻을 수 있습니다.
//*[text() = 'qwerty']
위의 코드는 값이 ‘qwerty’인 텍스트 노드 자식이 하나 이상있는 문서의 모든 요소를 선택합니다.
//*[text() = 'qwerty' and not(text()[2])]
위는 텍스트 노드 자식이 하나만 있고 값이 ‘qwerty’인 문서의 모든 요소를 선택합니다.
답변
시험
//*[text()='qwerty']
때문에 .
당신입니다 현재 요소