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 &gt; 50]

값이 Bob인 <last-name> 자식 요소와 값이 50보다 큰 <price> 형제 요소가 포함된 모든 <author> 요소

book[position() &lt;= 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() &lt; 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

참고 항목

참조

위치 경로 예제

개념

XPath 구문에 대한 샘플 XML 파일(inventory.xml)