XPath "형제를 따르기 전에"

html-agility-pack xpath

문제

특정 요소 (b)의 형제를 따르지만 다른 b 요소보다 먼저 오는 XPath 1.0 (또는 Regex과 함께있을 수 있음)을 사용하여 요소 (a)를 선택하려고합니다.

<img><b>First</b><br>&nbsp;&nbsp;
<img>&nbsp;&nbsp;<a href="/first-href">First Href</a> - 19:30<br>
<img><b>Second</b><br>&nbsp;&nbsp;
<img>&nbsp;&nbsp;<a href="/second-href">Second Href</a> - 19:30<br>
<img>&nbsp;&nbsp;<a href="/third-href">Third Href</a> - 19:30<br>

나는 샘플을 가능한 한 실제 세계에 가깝게하려고 노력했다. 그래서이 시나리오에서 내가 요소에있을 때

<img><b>First</b><br>&nbsp;&nbsp;
<img>&nbsp;&nbsp;<a href="/first-href">First Href</a> - 19:30<br>
<img><b>Second</b><br>&nbsp;&nbsp;
<img>&nbsp;&nbsp;<a href="/second-href">Second Href</a> - 19:30<br>
<img>&nbsp;&nbsp;<a href="/third-href">Third Href</a> - 19:30<br>

내가 선택해야 해.

<img><b>First</b><br>&nbsp;&nbsp;
<img>&nbsp;&nbsp;<a href="/first-href">First Href</a> - 19:30<br>
<img><b>Second</b><br>&nbsp;&nbsp;
<img>&nbsp;&nbsp;<a href="/second-href">Second Href</a> - 19:30<br>
<img>&nbsp;&nbsp;<a href="/third-href">Third Href</a> - 19:30<br>

그리고 내가있을 때

<img><b>First</b><br>&nbsp;&nbsp;
<img>&nbsp;&nbsp;<a href="/first-href">First Href</a> - 19:30<br>
<img><b>Second</b><br>&nbsp;&nbsp;
<img>&nbsp;&nbsp;<a href="/second-href">Second Href</a> - 19:30<br>
<img>&nbsp;&nbsp;<a href="/third-href">Third Href</a> - 19:30<br>

내가 선택해야 해.

<img><b>First</b><br>&nbsp;&nbsp;
<img>&nbsp;&nbsp;<a href="/first-href">First Href</a> - 19:30<br>
<img><b>Second</b><br>&nbsp;&nbsp;
<img>&nbsp;&nbsp;<a href="/second-href">Second Href</a> - 19:30<br>
<img>&nbsp;&nbsp;<a href="/third-href">Third Href</a> - 19:30<br>

어떻게 그 아이디어를 얻을 수 있을까요? 고맙습니다!

수락 된 답변

이 XPath를 동적으로 작성하십시오.

following-sibling::a[preceding-sibling::b[1][.='xxxx']]

여기서 'xxxx'는 현재 <b> 의 텍스트로 바뀝니다.

이 모든 요소가 실제로 형제 것으로 가정한다. 그렇지 않은 경우에는 작업을 시도 할 수 있습니다 precedingfollowing 축, 또는 당신은보다 구체적인 XPath를 더 유사 문서 구조를 작성합니다.

XSLT에서 다음을 사용할 수도 있습니다.

following-sibling::a[preceding-sibling::b[1][.='xxxx']]

인기 답변

다음은 단 하나의 XPath 표현식 인 솔루션입니다 .

두 개의 노드 집합 $ns1$ns2 교차대한 Kaysian 공식 사용 :

  $ns1[count(. | $ns2) = count($ns2)]

현재 <b> 노드 다음에 오는 <a> 형제 노드 집합으로 $ns1 을 대체하고 다음 <b> 노드 앞에 오는 <a> 형제 노드 집합으로 $ns2 를 대체합니다.

다음은이를 사용하는 완전한 변형입니다 .

  $ns1[count(. | $ns2) = count($ns2)]

이 변환이 다음 XML 문서에 적용될 때 :

  $ns1[count(. | $ns2) = count($ns2)]

올바른 결과가 생성됩니다 .

  $ns1[count(. | $ns2) = count($ns2)]



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.