XPath(XML Path Language)

  • XPath는 XML 문서의 특정 부분의 위치를 찾을 때 사용하는 언어입니다.
  • XPath는 XML 문서 안에 요소와 속성들을 탐색합니다.
  • XPath는 200개 이상의 내장함수를 포함하고 있습니다.
  • XSLT의 주요 구성요소입니다.
  • XML 계층 구조가 트리 형태 이기 때문에, 문서를 노드로 표현한 결과 역시 트리형태입니다.
  • /는 문서의 계층 구조에서 최상위 노드 역할을 하는 가상 노드입니다.
  • 트리는 최상위에 한 개의 가상 루트 노드(루트노드)를 갖고, 나머지는 모두 루트 노드에 연결됩니다.
  • xml의 선언인 <?xml version="1.0” ?> 얘 또한 루트 노드의 자식 노드로 간주합니다.
  • XPath에서 속성을 지정하려면 @를 사용합니다.
<students>
	<student stu="st10”>
		<name>dominic</name>
		<address>seoul</address>
	</student>
<students>

  • XPath의 절대 경로 방식 표현 -> /students/student/@stu

  • XPath의 상대 경로 방식 표현 -> student/@stu

  • 문서 내 위치에 상관없이 이름으로 경로를 지정할 수도 있습니다. 문서 내의 모든 <name> 요소의 위치를 나타내고자 한다면 //name으로 표현하면 됩니다.

  • student[name] - 자식 요소로 <name>을 가지고 있는 모든 <student> 요소

  • student{@stu} - 속성이 sno인 모든 <student> 요소

  • name[.=’dominic'] - 요소 내용이 ‘dominic’인 모든 <name>요소

  • student[@stu=’st10’] - stu 속성값이 st10인 모든 <student> 요소

  • XPath는 7개의 노드 종류로 구분됩니다. (element, attribute, text, namespace, processing-instruction, comment and document)

Selection Nodes

bookstore

“bookstore”인 이름의 모든 node를 선택합니다.

/bookstore

루트 요소 bookstore를 선택합니다

bookstore/book

bookstore의 자식인 모든 book 요소를 선택합니다.

//book

book이 어디있든지 간에 모든 book 요소를 선택합니다.

bookstore//book

bookstore아래에서 어딨든지 간에 모든 book 요소를 선택합니다.

//@lang

lang이라는 이름의 속성을 모두 선택합니다.

Predicates

  • Prediacates는 특별한 값이나 특별한 노드를 찾는데 쓰입니다.
  • Prediacates는 항상 []안에 들어갑니다.

/bookstore/book[1]

/bookstore 자식인 첫 번째 book 요소를 선택합니다.(IE 5,6,7,8,9 에서는 0이 첫 번째)

/bookstore/book[last()]

마지막 book 요소를 선택합니다

/bookstore/book[last()-1]

마지막에서 하나를 뺀 요소를 선택합니다.

/bookstore/book[position()<3]

첫 번째와 두 번째 요소를 선택합니다

//title[@lang]

lang이라는 속성 이름을 가진 모든 title 요소를 선택합니다.

//title[@lang=’en’]

lang이라는 속성에 값이 en인 모든 title 요소를 선택합니다.

/bookstore/book[price > 35]

price 요소의 값이 35가 넘는 모든 book 요소를 선택합니다

/bookstore/book[price > 35]/title

price가 35가 넘는 book 요소의 title 요소를 선택합니다.

/bookstore/book/price[text()]

price 요소에서 text를 가져옵니다.

Selecting Unknown Nodes

/bookstore/*

bookstore의 자식 요소들을 모두 선택합니다.

//*

문서 내의 모든 요소를 선택합니다.

//title[@*]

적어도 하나의 속성을 갖는 모든 title 요소를 선택합니다.

Selecting Several Paths

//book/title //book/price

모든 book의 price 요소와 title 요소들을 선택

//title //price

문서 내의 모든 title과 price

/bookstore/book/title //price

문서 내의 모든 price 요소와 bookstore 안에 book 안에 title 요소들

XPath Axes

  • 축은 XML 문서 트리에서 노드 간의 관계나 방향을 나타낼 때 사용합니다.
  • XPath에서 문서 트리를 탐색하기 위해서 제공하는 예약어를 사용하여 접근하게 됩니다. 축은 순방향이거나 역방향입니다.
  • 순방향은 XML 문서의 시작 부분에서 끝 부분으로 찾는 것을 의미합니다
  • 역방향은 문서의 끝 부분에서 시작부분으로 찾는 것을 의미한다.

Example

Result

child::book

Selects all book nodes that are children of the current node

attribute::lang

Selects the lang attribute of the current node

child::*

Selects all element children of the current node

attribute::*

Selects all attributes of the current node

child::text()

Selects all text node children of the current node

child::node()

Selects all children of the current node

descendant::book

Selects all book descendants of the current node

ancestor::book

Selects all book ancestors of the current node

ancestor-or-self::book

Selects all book ancestors of the current node - and the current as well if it is a book node

child::*/child::price

Selects all price grandchildren of the current node

reference