XPath 문법

XPath는 XML 문서에서 노드 또는 노드 집합을 선택하는 경로 표현식을 사용합니다. 노드는 경로(path) 또는 단계(steps)를 따라 선택됩니다.

XML 예제 문서

아래 예제에서 이 XML 문서를 사용하겠습니다.

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>
<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>

노드 선택

XPath는 XML 문서에서 노드를 선택하는 경로 표현식을 사용합니다. 노드는 경로 또는 단계를 따라 선택됩니다.

가장 유용한 경로 표현식을 나열했습니다:

표현식 설명
nodename 이 노드의 모든 자식 노드를 선택합니다.
/ 루트 노드에서 선택합니다.
// 현재 선택된 노드에서 문서의 노드를 선택하여 위치와 관계없이.
. 현재 노드를 선택합니다.
.. 현재 노드의 부모 노드를 선택합니다.
@ 속성을 선택합니다.

예제

아래 표에서는 몇 가지 경로 표현식과 그 결과를 나열했습니다:

경로 표현식 결과
bookstore bookstore 요소의 모든 자식 노드를 선택합니다.
/bookstore

root 요소 bookstore를 선택합니다.

주의: 경로가 정확한 슬래시(/)로 시작되면, 이 경로는 항상 특정 요소의 절대 경로를 나타냅니다!

bookstore/book bookstore의 자식 요소인 모든 book 요소를 선택합니다.
//book 문서 내 위치와 관계없이 모든 book 자식 요소를 선택합니다.
bookstore//book bookstore 요소의 후대 자식 요소인 모든 book 요소를 선택합니다. 그들도 bookstore 아래의 위치와 관계없이.
//@lang 모든 lang 속성을 선택합니다.

명사 조건(Predicates)

명사 조건은 특정 노드나 특정 값을 포함하는 노드를 찾는 데 사용됩니다.

명사 조건은 괄호로 포함됩니다.

예제

아래 표에서는 명사 조건을 포함한 몇 가지 경로 표현식과 그 결과를 나열했습니다:

경로 표현식 결과
/bookstore/book[1] bookstore 자식 요소의 첫 번째 book 요소를 선택합니다.
/bookstore/book[last()] bookstore 자식 요소의 마지막 book 요소를 선택합니다.
/bookstore/book[last()-1] bookstore 자식 요소의 마지막 두 번째 book 요소를 선택합니다.
/bookstore/book[position()<3] bookstore 요소의 가장 앞의 두 번째 자식 요소인 book 요소를 선택합니다.
//title[@lang] 속성 이름이 lang인 모든 title 요소를 선택합니다.
//title[@lang='eng'] 값이 eng인 lang 속성을 가진 모든 title 요소를 선택합니다.
/bookstore/book[price>35.00] bookstore 요소의 모든 book 요소를 선택하고, price 요소의 값이 35.00 이상이어야 합니다.
/bookstore/book[price>35.00]/title bookstore 요소 내의 book 요소의 모든 title 요소를 선택하고, price 요소의 값이 35.00보다 큰 경우를 선택합니다.

알 수 없는 노드 선택

XPath 대체기는 알 수 없는 XML 요소를 선택하는 데 사용될 수 있습니다.

대체기 설명
* 모든 요소 노드와 일치합니다.
@* 모든 속성 노드와 일치합니다.
node() 모든 타입의 노드와 일치합니다.

예제

아래 표에서 경로 표현식과 그 결과를 나열했습니다:

경로 표현식 결과
/bookstore/* bookstore 요소의 모든 자식 요소를 선택합니다.
//* 문서의 모든 요소를 선택합니다.
//title[@*] 속성을 가진 모든 title 요소를 선택합니다.

여러 경로 선택

경로 표현식에서 “|” 연산자를 사용하여 여러 경로를 선택할 수 있습니다.

예제

아래 표에서 경로 표현식과 그 결과를 나열했습니다:

경로 표현식 결과
//book/title | //book/price book 요소의 모든 title 및 price 요소를 선택합니다.
//title | //price 문서의 모든 title 및 price 요소를 선택합니다.
/bookstore/book/title | //price bookstore 요소에 속한 모든 title 요소와 문서 전체의 모든 price 요소를 선택합니다.