it-source

형제 노드에 특정 값이 있는 경우 XPath를 사용하여 노드를 선택하는 방법은 무엇입니까?

criticalcode 2023. 9. 23. 22:47
반응형

형제 노드에 특정 값이 있는 경우 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 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

반응형