XPath가 bookstore/book[1]
에서 첫 번째 책 노드를 선택합니다 bookstore
.
더 복잡한 조건과 일치하는 첫 번째 노드를 선택하는 방법 (예 : 일치하는 첫 번째 노드) /bookstore/book[@location='US']
답변
사용하다:
(/bookstore/book[@location='US'])[1]
먼저 location 속성이 ‘US’인 책 요소를 가져옵니다. 그런 다음 해당 세트에서 첫 번째 노드를 선택합니다. 일부 구현에 필요한 괄호 사용에 유의하십시오.
/bookstore/book[1][@location='US']
첫 번째 요소에 해당 위치 속성 이없는 경우와 동일하지 않습니다 .
답변
/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]
작품으로 기대했다.
답변
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]
답변
xpath가 복잡하거나 동일한 xpath가있는 둘 이상의 노드가있는 경우 색인을 사용하여 원하는 노드를 얻으십시오.
예 :
(//bookstore[@location = 'US'])[index]
원하는 노드 수를 지정할 수 있습니다.
답변
주어진 XML에 네임 스페이스가 제공되면 이것을 사용하는 것이 좋습니다.
(/*[local-name() ='bookstore']/*[local-name()='book'][@location='US'])[1]
