다음 문서가 있습니다.
<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
?
다음 문서가 있습니다.
<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()
*-sibling
축을 사용하지 않았습니다 . 그래도 +1.
필요한 것은 following-sibling
XPath 축입니다.
//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']
//a[bb = 'zz']/cc
.
우선, 귀하의 예제는 올바른 형식의 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()
//a/cc[../bb='zz']/text()
// a : 어디에 있든 모든 'a'요소를 선택합니다.
// a / cc : 'a'요소의 하위 요소 인 'cc'요소를 선택합니다 (a가 어디에 있든 상관 없음).
.. : 현재 노드의 부모를 선택합니다.
[../bb='zz '] : 형제'bb '요소의 값은 zz입니다.