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 요소를 선택합니다. |