XPath 예제

이 절에서 XPath 기본 문법을 예제를 통해 배웁니다.

XML 예제 문서

아래 예제에서 이 XML 문서를 사용하겠습니다:

"books.xml" :

<?xml version="1.0" encoding="ISO-8859-1"?>
<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>

이 "books.xml" 파일을您的浏览器에서 확인하세요

XML 문서 로드

모든 현대 브라우저는 XMLHttpRequest를 사용하여 XML 문서를 로드하는 방법을 지원합니다。

대부분의 현대 브라우저에 대한 코드:

var xmlhttp=new XMLHttpRequest()

오래된 마이크로소프트 브라우저(IE 5와 6)에 대한 코드:

var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")

노드 선택

그러나不幸的是, Internet Explorer와 다른 XPath 처리 방식을 사용합니다.

예제에서는 대부분의 주요 브라우저에 적용되는 코드를 포함하고 있습니다。

Internet Explorer는 selectNodes() 메서드를 사용하여 XML 문서에서 노드를 선택합니다:

xmlDoc.selectNodes(xpath);

Firefox, Chrome, Opera 및 Safari는 evaluate() 메서드를 사용하여 XML 문서에서 노드를 선택합니다:

xmlDoc.evaluate(xpath, xmlDoc, null, XPathResult.ANY_TYPE, null);

모든 title을 선택합니다

다음의 예제는 모든 title 요소를 선택합니다:

/bookstore/book/title

직접 시도해보세요

첫 번째 book의 title 선택

bookstore 요소 아래의 첫 번째 book 노드의 title을 선택하는 예제 다음은:

/bookstore/book[1]/title

직접 시도해보세요

여기에 문제가 있습니다. 위의 예제가 IE와 다른 브라우저에서 다른 결과를 출력합니다.

IE5 및 이상 버전에서 [0]은 첫 번째 노드로 간주되며, W3C의 표준에 따르면 [1]이어야 합니다.

IE5+에서 [0]과 [1]의 문제를 해결하기 위해 XPath에 언어 선택(SelectionLanguage)을 설정할 수 있습니다.

bookstore 요소 아래의 첫 번째 book 노드의 title을 선택하는 예제 다음은:

xml.setProperty("SelectionLanguage","XPath");
xml.selectNodes("/bookstore/book[1]/title");

직접 시도해보세요

모든 가격 선택

price 노드의 모든 텍스트를 선택하는 예제 다음은:

/bookstore/book/price/text()

직접 시도해보세요

35 이상의 가격을 가진 price 노드 선택

35 이상의 가격을 가진 모든 price 노드를 선택하는 예제 다음은:

/bookstore/book[price>35]/price

직접 시도해보세요

35 이상의 가격을 가진 title 노드 선택

35 이상의 가격을 가진 모든 title 노드를 선택하는 예제 다음은:

/bookstore/book[price>35]/title

직접 시도해보세요