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