개요
Xpath(XML Path Language)는 XML의 요소와 속성들을 탐색하고 추출하는 표준 경로 언어이다.
Xpath를 사용하면 XML 문서의 데이터를 분석하고 문서의 특정 노드에 접근할 수 있으며,
Javascript, JAVA, Python 등 여러 가지 언어에서 사용될 수 있는 도구이다.
Xpath 표현식은 경로나 패턴을 사용해 XML 문서의 노드를 선택할 수 있다.
Xpath는 특정 노드를 선택하기 위해 여러 가지 연산자와 함수를 제공한다.
예를 들어, 특정 요소의 자식 노드를 선택하기 위해서 "/" 연산자를 사용하고,
모든 요소를 선택하기 위해서는 "//" 연산자를 사용한다.
또한, Xpath는 속성 값으로 필터링하거나 요소의 위치를 기준으로 필터링하는 기능도 제공한다.
Xpath 예시
아래와 같은 XML 문서를 Xpath를 사용해 탐색해 보겠다.
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
1. 문서 내의 루트 노드를 선택
/
# 결과 bookstore
2. 문서 내의 모든 book 노드를 선택
/bookstore/book
# 결과
book (4개)
3. 문서 내의 모든 title 속성을 선택
//title/@title
#결과
Everyday Italian
Harry Potter
XQuery Kick Start
Learning XML
4. 문서 내의 첫 번째 book 노드의 author 속성을 선택
(/bookstore/book)\[1\]/author
# 결과
Giada De Laurentiis
5. 문서 내의 price 속성 값이 35.00보다 큰 book 노드를 선택
/bookstore/book\[price>35.00\]
# 결과
book (2개)
6. 문서 내의 genre 속성 값이 "Novel"인 book 노드를 선택 (없는 속성)
//book\[genre="Novel"\]
# 결과
없음
위와 같은 XPath 구문은 XML 문서의 노드와 속성을 검색하고 선택하는 데 사용된다.
Xpath 함수
Xpath 에서 함수는 앞서 말했든 여러 가지가 있다.
그중에서 Node 탐색에 사용되는 Contains와 Normalize-space의 사용방법을 알아보겠다.
1. Contains 는 속성의 특정 문자열이 포함된 정보를 찾을 때 사용한다.
//book[contains(author, "Doe")]
2. Normalize-space는 특정 문자열이 해당 속성 값인 정보를 찾을 때 사용한다.
//book[normalize-space(author)="John Doe"]
XPath는 XML 문서에서 정보를 검색하고 추출하는데 매우 편리한 방법이다.
기본적인 구문과 함수를 익히면, 다양한 요구사항에 따라 유연하게 사용할 수 있다.