XPath 문법

XPath는 경로(path) 또는 단계(steps)를 통해 XML 문서의 노드 또는 노드 집합을 선택하는 데 사용됩니다.

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

루트 요소 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'] 모든 title 요소를 선택하고, 이들 요소의 lang 속성 값이 eng인 것.
/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 요소에 속한 모든 book 요소의 title 요소와 문서 중 모든 price 요소를 선택합니다.