XPath 예제
이 항목에서는 XPath 참조 전체에 나타나는 구문 예제를 살펴봅니다.모든 예제는 XPath 구문에 대한 샘플 XML 파일(inventory.xml)을 기반으로 합니다.테스트 파일에서 XPath 식을 사용하는 예제는 이 항목 하단의 "통합( | ) 예제"를 참조하십시오.
식 |
참조 항목 |
---|---|
./author |
현재 컨텍스트 내에 있는 모든 <author> 요소.이 식은 다음 행에 나온 식과 같습니다. |
author |
현재 컨텍스트 내에 있는 모든 <author> 요소 |
first.name |
현재 컨텍스트 내에 있는 모든 <first.name> 요소 |
/bookstore |
이 문서의 문서 요소(<bookstore>) |
//author |
문서에 있는 모든 <author> 요소 |
book[/bookstore/@specialty=@style] |
style 특성 값이 문서의 루트에 있는 <bookstore> 요소의 specialty 특성 값과 같은 모든 <book> 요소 |
author/first-name |
<author> 요소의 자식인 모든 <first-name> 요소 |
bookstore//title |
<bookstore> 요소(임의의 하위 항목)에서 수준이 하나 이상인 모든 세부 <title> 요소.이 식은 다음 행에 나온 식과 다릅니다. |
bookstore/*/title |
<bookstore> 요소의 최하위인 모든 <title> 요소 |
bookstore//book/excerpt//emph |
<bookstore> 요소 내에 있는 <book> 요소의 <excerpt> 자식 내에 있는 모든 <emph> 요소 |
.//title |
현재 컨텍스트에서 수준이 하나 이상인 모든 세부 <title> 요소.이 상황은 유일하게 기간 노테이션이 필요한 경우입니다. |
author/* |
<author> 요소의 모든 자식 요소 |
book/*/last-name |
<book> 요소의 최하위인 모든 <last-name> 요소 |
*/* |
현재 컨텍스트의 모든 최하위 요소 |
*[@specialty] |
specialty 특성이 있는 모든 요소 |
@style |
현재 컨텍스트의 style 특성 |
price/@exchange |
현재 컨텍스트 내에 있는 <price> 요소의 exchange 특성 |
price/@exchange/total |
특성에 요소 자식이 포함되지 않았으므로 빈 노드 집합을 반환합니다.이 식은 XPath(XML Path Language) 문법상 허용되지만 엄격히 말하면 유효하지 않습니다. |
book[@style] |
현재 컨텍스트의 style 특성이 있는 모든 <book> 요소 |
book/@style |
현재 컨텍스트의 모든 <book> 요소에 대한 style 특성 |
@* |
현재 요소 컨텍스트의 모든 특성 |
./first-name |
현재 컨텍스트 노드에 있는 모든 <first-name> 요소.이 식은 다음 행에 나온 식과 같습니다. |
first-name |
현재 컨텍스트 노드에 있는 모든 <first-name> 요소 |
author[1] |
현재 컨텍스트 노드에서 첫 번째 <author> 요소 |
author[first-name][3] |
<first-name> 자식 요소가 있는 세 번째 <author> 요소 |
my:book |
my 네임스페이스의 <book> 요소 |
my:* |
my 네임스페이스의 모든 요소 |
@my:* |
my 네임스페이스의 모든 특성. 여기에는 my 네임스페이스의 요소에서 비정규화된 특성이 포함되지 않습니다. |
인덱스는 부모에 상대적입니다.다음 데이터를 살펴보십시오.
<x>
<y/>
<y/>
</x>
<x>
<y/>
<y/>
</x>
식 |
참조 항목 |
---|---|
x/y[1] |
각 <x>의 첫 번째 <y> 자식.이 식은 다음 행에 나온 식과 같습니다. |
x/y[position() = 1] |
각 <x>의 첫 번째 <y> 자식 |
(x/y)[1] |
<x> 요소의 전체 <y> 자식 집합에서 첫 번째 <y> |
x[1]/y[2] |
첫 번째 <x>의 두 번째 <y> 자식 |
나머지 예제는 XPath에 대한 샘플 XML 파일을 참조합니다.
식 |
참조 항목 |
---|---|
book[last()] |
현재 컨텍스트 노드의 마지막 <book> 요소 |
book/author[last()] |
현재 컨텍스트 노드에서 각 <book> 요소의 마지막 <author> 자식 |
(book/author)[last()] |
현재 컨텍스트 노드에서 <book> 요소의 전체 <author> 자식 집합에서 마지막 <author> 요소 |
book[excerpt] |
<excerpt> 요소 자식이 하나 이상 포함된 모든 <book> 요소 |
book[excerpt]/title |
<excerpt> 요소 자식이 하나 이상 포함된 <book> 요소의 자식인 모든 <title> 요소 |
book[excerpt]/author[degree] |
<degree> 요소 자식이 하나 이상 포함되어 있고, <excerpt> 요소가 하나 이상 포함된 <book> 요소의 자식인 모든 <author> 요소 |
book[author/degree] |
<degree> 자식이 하나 이상 포함된 <author> 자식을 포함하는 모든 <book> 요소 |
author[degree][award] |
<degree> 요소 자식과 <award> 요소 자식이 하나 이상 포함된 모든 <author> 요소 |
author[degree and award] |
<degree> 요소 자식과 <award> 요소 자식이 하나 이상 포함된 모든 <author> 요소 |
author[(degree or award) and publication] |
<degree> 또는 <award> 요소 하나 이상과 <publication> 요소가 자식으로 하나 이상 포함된 모든 <author> 요소 |
author[degree and not(publication)] |
<degree> 요소 자식이 하나 이상 포함되어 있고 <publication> 요소 자식이 포함되지 않은 모든 <author> 요소 |
author[not(degree or award) and publication] |
<publication> 요소 자식이 하나 이상 포함되어 있고 <degree> 및 <award> 요소 자식이 포함되지 않은 모든 <author> 요소 |
author[last-name = "Bob"] |
값이 Bob인 <last-name> 요소 자식이 하나 이상 포함된 모든 <author> 요소 |
author[last-name[1] = "Bob"] |
첫 번째 <last-name> 자식 요소의 값이 Bob인 모든 <author> 요소.이 식은 다음 행에 나온 식과 같습니다. |
author[last-name [position()=1]= "Bob"] |
첫 번째 <last-name> 자식 요소의 값이 Bob인 모든 <author> 요소 |
degree[@from != "Harvard"] |
from 특성이 "Harvard"가 아닌 모든 <degree> 요소 |
author[.= "Matthew Bob"] |
값이 Matthew Bob인 모든 <author> 요소 |
author[last-name = "Bob" and ../price > 50] |
값이 Bob인 <last-name> 자식 요소와 값이 50보다 큰 <price> 형제 요소가 포함된 모든 <author> 요소 |
book[position() <= 3] |
처음 세 책(1, 2, 3)입니다. |
author[not(last-name = "Bob")] |
값이 Bob인 <last-name> 자식 요소가 포함되지 않은 모든 <author> 요소 |
author[first-name = "Bob"] |
값이 Bob인 <first-name> 자식이 하나 이상 포함된 모든 <author> 요소 |
author[* = "Bob"] |
값이 Bob인 자식 요소가 포함된 모든 author 요소 |
author[last-name = "Bob" and first-name = "Joe"] |
값이 Bob인 <last-name> 자식 요소와 값이 Joe인 <first-name> 자식 요소가 포함된 모든 <author> 요소 |
price[@intl = "Canada"] |
컨텍스트 노드에서 intl 특성이 "Canada"인 모든 <price> 요소 |
degree[position() < 3] |
컨텍스트 노드의 자식인 처음 두 <degree> 요소 |
p/text()[2] |
컨텍스트 노드의 각 <p> 요소에서 두 번째 텍스트 노드 |
ancestor::book[1] |
컨텍스트 노드의 가장 가까운 <book> 상위 요소 |
ancestor::book[author][1] |
컨텍스트 노드의 가장 가까운 <book> 상위 요소이며 이 <book> 요소에는 <author> 요소가 자식으로 포함되어 있습니다. |
ancestor::author[parent::book][1] |
현재 컨텍스트의 가장 가까운 <author> 상위 요소이며 이 <author> 요소는 <book> 요소의 자식입니다. |
통합( | ) 예제
다음 XPath 식을 사용하여 통합 연산에 대해 알 수 있습니다.
x | y/x
다음 XML 파일에서 값이 green 또는 blue인 <x> 요소를 모두 선택합니다.
XML 파일(data1.xml)
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="union.xsl"?>
<root>
<x>green</x>
<y>
<x>blue</x>
<x>blue</x>
</y>
<z>
<x>red</x>
<x>red</x>
</z>
<x>green</x>
</root>
XSLT 파일(union.xsl)
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="root">
<xsl:for-each select="x | y/x">
<xsl:value-of select="."/>,
<xsl:if test="not(position()=last())">,</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
서식이 지정된 출력
green,blue,blue,green
프로세서 출력
<?xml version="1.0" encoding="UTF-16"?>green,blue,blue,green