형제 노드에 특정 값이있는 경우 XPath를 사용하여 노드를 선택하는 방법은 무엇입니까?
다음 문서가 있습니다.
<a>
<bb>abc</bb>
<cc>ccc</cc>
<dd>ddd</dd>
</a>
<a>
<bb>zz</bb>
<cc>1</cc>
<dd>2</dd>
</a>
어떻게 값 얻을 수있는 <cc>경우 XPath를 사용하여 <bb>입니다 zz?
모든 사람들이 형제를 쿼리하는 이유를 <bb/>모르면의 술어에서 술어와 일치하는 -elements 를 확인할 수도 <a/>있습니다.
//a[bb/text() = "zz"]/cc/text()
필요한 것은 following-siblingXPath 축입니다.
//a/bb[text()="zz"]/following-sibling::cc[1]/text()
여기에서 Xpath를 테스트하십시오. http://www.xpathtester.com/obj/b55ec3ac-dfa4-4f44-81e8-f963ea4a0625
Q : 형제 노드에 특정 값이있는 경우 XPath를 사용하여 노드를 선택하는 방법은 무엇입니까?
다음 형제 및 이전 형제에 대한 "XPath 축"만 있기 때문에 위치가 고정 된 경우 둘 중 하나를 사용할 수 있습니다.
그러나 더 나은 :cc 부모 bb에게 가치있는 자녀가 있는지 찾아보십시오 'zz'.
//cc[../bb='zz']
먼저, 귀하의 예제는 올바른 형식의 XML이 아닙니다. 그것을 간과하고 당신의 의도를 잘 설명하지 않았다는 것을 (어떤 조건에서 정확히 무엇을 선택하고 싶습니까?), 나는 당신이 이것을하고 싶다고 가정합니다.
//cc[preceding-sibling::bb[text()="zz"]]/text()
그것은 선택
TEXT VALUES OF ALL <CC> ELEMENTS
//cc /text()
THAT HAVE A PRECEDING SIBLING <BB>
[preceding-sibling::bb ]
THAT HAS TEXT VALUE EQUAL TO "zz"
[text()="zz"]
당신은 또한 다음과 같이 쓸 수 있습니다
//bb[text()="zz"]/following-sibling::cc/text()
spec을 보라. 그것은 당신이 많은 것을 배울 수있는 아주 잘 읽을 수있는 몇 가지 예제 를 가지고있다.
//a/cc[../bb='zz']/text()
// a : 어디에 있든 모든 'a'요소를 선택합니다.
// a / cc : 'a'요소의 하위 요소 인 'cc'요소를 선택합니다 (a가 어디에 있든 상관 없음).
.. : 현재 노드의 부모를 선택합니다.
[../bb='zz '] : 형제'bb '요소의 값은 zz입니다.
참조 : http://www.w3schools.com/xsl/xpath_syntax.asp
이 문제에 대한 또 다른 해결책은
//bb[contains(.,'zz')]/../cc/text()
설명 : 모든 bb포함 된 'zz'모든 자식 노드에 문자열을 bb다음의 부모 노드에가는 것을 bb사용하여 ..우리가 액세스 할 수있는 지금, cc그래서 반환 텍스트를.
설명이 복잡하지 않기를 바랍니다.
'program story' 카테고리의 다른 글
| CSS 및 jQuery를 사용하는 Instagram의 iPhone 앱에서와 같이 "푸시 업"하는 고정 헤더 가져 오기 (0) | 2020.11.01 |
|---|---|
| int.TryParse가 실제로 작동하는 방식 (0) | 2020.11.01 |
| gradle-wrapper를 사용할 때 다운로드하지 않고 로컬 시스템에서 gradle zip을 사용하는 방법 (0) | 2020.11.01 |
| error :: make_unique는 'std'의 구성원이 아닙니다. (0) | 2020.11.01 |
| Pascal Case를 문장으로 변환하는 가장 좋은 방법 (0) | 2020.11.01 |