형제 노드에 특정 값이 있는 경우 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-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 Axis"만 있으므로 위치가 고정되어 있으면 그 중 하나를 사용할 수 있습니다.
하지만 더 좋은 점:찾다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()
스펙을 보세요, 아주 잘 읽을 수 있는 예시들이 있어서 많이 배울 수 있을 거예요.
이 문제에 대한 또 다른 해결책은
//bb[contains(.,'zz')]/../cc/text()
설명 : 없음bb
을 포함하고 있는'zz'
의 모든 하위 노드에 문자열을 입력합니다.bb
부모님 노드로 가는 것이에요bb
사용...
, 이제 우리가 접근할 수 있게 되었으니cc
그래서 답장 문자.
그 설명이 복잡하지 않았으면 좋겠습니다.
//a/cc[../bb='zz']/text()
//a : 위치에 상관없이 모든 'a' 요소를 선택합니다.
//a/cc : 'a' 요소의 자식인 'cc' 요소를 선택합니다(a 위치에 관계없이).
.. : 현재 노드의 부모를 선택합니다.
[../bb='zz'] : 여기서 형제 'bb' 요소의 값은 zz입니다.
참조 : http://www.w3schools.com/xsl/xpath_syntax.asp
언급URL : https://stackoverflow.com/questions/17040254/how-to-select-a-node-using-xpath-if-sibling-node-has-a-specific-value
'it-source' 카테고리의 다른 글
프로젝트의 여러 대상 및 플랫폼에 대한 Swift Package 소비? (0) | 2023.09.23 |
---|---|
Maria DB를 AWS에 연결할 수 없음 Quicksight (0) | 2023.09.23 |
여러 표에서 구별되는 값을 선택하는 방법 (0) | 2023.09.23 |
쥬리 겟제이SON 채우기 선택 메뉴 질문 (0) | 2023.09.23 |
내장된 C 코드의 유지보수성을 위해 #c 소스 파일을 #포함해도 괜찮습니까? (0) | 2023.09.23 |