답변:
사용하다:
(/bookstore/book[@location='US'])[1]
먼저 location 속성이 'US'인 책 요소를 가져옵니다. 그런 다음 해당 세트에서 첫 번째 노드를 선택합니다. 일부 구현에 필요한 괄호 사용에 유의하십시오.
/bookstore/book[1][@location='US']
첫 번째 요소에 해당 위치 속성 이없는 경우와 동일하지 않습니다 .
/bookstore/book[@location='US'][1]
가 '미국'의 모든 책을 반환하지는 않습니다. 나는 그것을 여러 번 그리고 다른 언어의 xpath 구현에서 테스트했다. /bookstore/book[@location='US'][1]
서점에서 첫 번째 '미국'책을 반환합니다. 여러 서점이있는 경우 각 서점에서 첫 서점을 반환합니다. 이것이 OP가 요청한 것입니다 (서점의 첫 번째 노드). 버전은 모든 서점에서 첫 번째 책만 반환합니다 (첫 번째 일치).
/bookstore/book[@location='US'][1]
간단한 구조에서만 작동합니다.
좀 더 구조를 추가하면 문제가 해결됩니다.
와
<bookstore>
<category>
<book location="US">A1</book>
<book location="FIN">A2</book>
</category>
<category>
<book location="FIN">B1</book>
<book location="US">B2</book>
</category>
</bookstore>
/bookstore/category/book[@location='US'][1]
수확량
<book location="US">A1</book>
<book location="US">B2</book>
"더 복잡한 조건과 일치하는 첫 번째 노드"가 아닙니다. /bookstore/category/book[@location='US'][2]
아무것도 반환하지 않습니다.
괄호를 사용하면 원래 질문의 결과를 얻을 수 있습니다.
(/bookstore/category/book[@location='US'])[1]
준다
<book location="US">A1</book>
그리고 (/bookstore/category/book[@location='US'])[2]
작품으로 기대했다.
/bookstore/book[1]
되었고 NOT (/bookstore/book)[1]
. 제공하신 사례는 OP가 요청한 사례와 다릅니다. 아마도 OP는 예상 한대로 요청한대로 응답을 받아 들였습니다.
'(//div[text() = "'+ name +'"])[1]/following-sibling::*/div/text()'
. 일치하는 노드가 많은 경우 name
.
Jonathan Fingland의 답변에 대한 설명 :
[position()=1 and @location='US']
) 의 여러 조건 이 전체적으로 사실이어야합니다.[position()=1][@location='US']
) 참이어야 속출[position()=1][@location='US']
! = [@location='US'][position()=1]
[position()=1 and @location='US']
==[@location='US' and position()=1]
[position()=1]
은 다음과 같이 축약 될 수 있습니다[1]
당신은 부울 연산자 "와 술어 복잡한 표현을 구축 할 수 있습니다 and
"와 " or
"및 부울 XPath 함수와 not()
, true()
와 false()
. 또한 하위 표현식을 괄호로 묶을 수 있습니다.
보다 복잡한 구조화 된 xml 파일을 고려하여 첫 번째 영어 서적 노드를 찾는 가장 쉬운 방법은 다음과 같습니다.
<bookstore>
<category>
<book location="US">A1</book>
<book location="FIN">A2</book>
</category>
<category>
<book location="FIN">B1</book>
<book location="US">B2</book>
</category>
</bookstore>
xpath 표현식입니다.
/descendant::book[@location='US'][1]
<bookstore>
<book location="US">A1</book>
<category>
<book location="US">B1</book>
<book location="FIN">B2</book>
</category>
<section>
<book location="FIN">C1</book>
<book location="US">C2</book>
</section>
</bookstore>
위의 내용을 감안할 때; 당신은 첫 번째 책을 선택할 수 있습니다
(//book[@location='US'])[1]
그리고 이것은 위치가 미국인 첫 번째 곳을 찾을 것입니다. [A1]
//book[@location='US']
위치가 US 인 모든 책으로 설정된 노드를 반환합니다. [A1, B1, C2]
(//category/book[@location='US'])[1]
문서의 어느 위치 에나있는 첫 번째 책 위치 US를 반환합니다. [B1]
(/bookstore//book[@location='US'])[1]
루트 요소 서점 아래에 위치 US가있는 첫 번째 책을 반환합니다. / bookstore 부분을 실제로 중복으로 만듭니다. [A1]
직접적인 대답으로 :
/bookstore/book[@location='US'][1]
서점 아래에 위치 US가있는 책 요소의 첫 번째 노드를 반환합니다. [A1]
이 예제에서 서점의 직계 자녀가 아닌 최초의 미국 서적을 찾으려면 다음과 같이하십시오.
(/bookstore/*//book[@location='US'])[1]
예를 들어.
<input b="demo">
과
(input[@b='demo'])[1]
온라인의 도움으로 테스터 XPath는 내가 ...이 대답을 쓰고 있어요
이를 위해 :
<table id="t2"><tbody>
<tr><td>123</td><td>other</td></tr>
<tr><td>foo</td><td>columns</td></tr>
<tr><td>bar</td><td>are</td></tr>
<tr><td>xyz</td><td>ignored</td></tr>
</tbody></table>
다음 xpath :
id("t2") / tbody / tr / td[1]
출력 :
123
foo
bar
xyz
이후 1 개 수단 모두 선택 TD를 자신의 직접 부모의 첫 번째 자식있는 요소.
그러나 다음 xpath :
(id("t2") / tbody / tr / td)[1]
출력 :
123