Xpath 정리
2016.12.31 08:32
Xpath 정리
What is XPath?
XPath는 XML문서의 일부분을 정의(선택) 하는 문법이다. XPath 구문들은 전통적인 컴퓨터 파일시스템의 구조와 유사하며 구문과 100개의 내장 함수를 이용하여 XML문서를 탐색하는데 사용된다. XSLT의 주요 구성요소이며 XPointer, XML 구문분석 소프트웨어 에서 사용되도록 디자인 되었다. W3C 권고안 이다.
용어정리
태그(tag) :
< 로 시작해서 > 로 끝나는 형식정의이며 시작태그, 종료태그, 빈태그가 있다.
엘리먼트(Element) :
시작태그와 종료태그 그리고 태그 사이의 모든내용을 말하며 태그, 자식에러먼트, 속성, 텍스트(컨텐츠)가 있다.
노드(node) :
XML문서는 여러개의 가지(Nodes)로 구성된 나무(Tree)로 비유된다. 말 그래도 Nodes 나무를 구성하는 줄기, 가지, 잎, 꽃 이런 것이다. XPath 에서 Node는 element, attribute, text, namespace, processing-instruction, comment, document 의 7가지 노드가 존재한다. 노드 사이의 관계를 나타내는 용어로 부모노드(Parent), 자식노드 (Children), 형재노드(Siblings), 조상노드(Ancestors), 자손노드(Descendants)를 사용한다.
XPath Syntax
<?xml version="1.0" encoding="utf-8"?>
<!-- XPath 문법을 설명할 예제 파일 입니다. -->
<bookstore>
<book>
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
루트엘리먼트 노드 : <bookstore> .. </bookstore>
엘리먼트 노드 : <author>J K. Rowling</author>
속성 노드 : lang="en"
Atomic values : 자식노드나 부모노드가 없는 노드 ( J K. Rowling 과 "en" )
구문과 기호
nodename : 지정한 노드이름을 가진 모든 노드를 선택
/ : 루트노드를 기준위치로 하는 위치 지시자
// : XML문서내에서 모든 위치를 기준위치로 하는 위치 지시자
. : 현재노드를 기준위치로 정하는 위치 지시자
.. : 부모노드를 기준위치로 사용하는 위치 지시자
@ : 속성을 선택하기 위해 사용되는 지시자
nodename[표현식] : 조건에 해당하는 노드들을 선택 하는데 사용
* : 모든 엘러먼트노드를 의미하는 XPath의 와일드 카드
@* : 모든 속성노드를 의미하는 XPath의 와일드 카드
node() : 모등종류의 노드를 의미한 XPath의 와일드 카드
| : 노드의 합집합 연산자
구문예제와 설명 (위의 xml 파일 기준)
bookstore
bookstore 엘리먼트(모든 자식노드 포함)를 선택한다.
/bookstore
루트경로의 하위엘리먼트 bookstore를 선택한다. (절대경로)
bookstore/book
bookstore 엘러먼트의 자식에러먼트 중 book 엘리먼트를 모두 선택
//book
xml 문서내의 모든 book 엘리먼트늘 선택
bookstore//book
bookstore element의 자손인 모든 book 엘리먼트를 선택
xml 문서 내에서 이름이 lang 인 모든 속성을 선택함
/bookstore/book[1]
bookstore 엘리먼트의 자식엘리먼트 중 첫번째 book 엘리먼트를 선택
/bookstore/book[last()]
bookstore 엘리먼트의 자식엘리먼트 중 마지막 book 엘리먼트를 선택
/bookstore/book[last()-1]
bookstore 엘리먼트의 자식엘리먼트 중 마지막에서 첫번째 book 엘리먼트를 선택
/bookstore/book[position()<3]
bookstore 엘리먼트의 자식엘리먼트 중 처음부터 2개의 book 엘리먼트를 선택
//title[@lang]
문서 내의 모든 title 엘리먼트 중 이름이 lang인 속성을 포함한 것 들을 선택
//title[@lang='eng']
문서 내의 모든 title 엘리먼트 중 이름이 lang이고 값이 'eng'인 속성을 포함한 것 들을 선택
/bookstore/book[price>35.00]
bookstore 엘리먼트의 자식엘리먼트인 book 엘리먼트 중에서 자식 엘리먼트 price의 값이 35보단 큰 것들을 선택
/bookstore/book[price>35.00]/title
자식엘리먼트 price가 35보다 큰 book 엘리먼트의 자식엘리먼트인 title 엘리먼트를 모두 선택
/bookstore/*
bookstore엘리먼트의 모든 자식노드를 선택
//*
문서의 모든 엘리먼트를 선택
//title[@*]
xml 문서내에서 속성이 없는 모든 title 엘리먼트를 선택
//book/title | //book/price
문서내에서 book 엘리먼트의 자식인 title 노드와 price 논드를 선택
/bookstore/book/title | //price
bookstore의 손자이며 book의 자식인 title 엘리먼트와 문서내의 모든 price 엘리먼트를 선택
child::book
현재 노드의 자식노드 중에서 모든 book 노드를 선택
attribute::lang
현재 노드의 모든 lang 속성노드를 선택
child::*
현재 노드의 모든 자식노드를 선택
attribute::*
현재노드의 모든 속성노드를 선택
child::text()
현재노드의 모든 자식노드 중 text 노드를 선택
child::node()
현재노드의 모든 자식 노드를 선택
descendant::book
현재 노드의 자손노드 중 book 노드를 모두 선택
ancestor::book
현재 노드의 조상노드 중 book 노드를 모두 선택
ancestor-or-self::book
현재노드의 조상 노드중에서 book 노드를 선택하고 현재노드가 book 노드이면 포함
child::*/child::price
현재노드의 손자 노드중 모든 price 노드를 선택
[출처] http://fortune94.tistory.com/179
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.