在本節(jié),讓我們通過(guò)實(shí)例來(lái)學(xué)習(xí)一些基礎(chǔ)的 XPath 語(yǔ)法。
XPath 實(shí)例
XML實(shí)例文檔
我們將在下面的例子中使用這個(gè) 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 文檔
所有現(xiàn)代瀏覽器都支持使用 XMLHttpRequest 來(lái)加載 XML 文檔的方法。
針對(duì)大多數(shù)現(xiàn)代瀏覽器的代碼:
var xmlhttp=new XMLHttpRequest()
針對(duì)古老的微軟瀏覽器(IE 5 和 6)的代碼:
var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
選取節(jié)點(diǎn)
不幸的是,Internet Explorer 和其他處理 XPath 的方式不同。
在我們的例子中,包含適用于大多數(shù)主流瀏覽器的代碼。
Internet Explorer 使用 selectNodes() 方法從 XML 文檔中的選取節(jié)點(diǎn):
xmlDoc.selectNodes(xpath);
Firefox、Chrome、Opera 以及 Safari 使用 evaluate() 方法從 XML 文檔中選取節(jié)點(diǎn):
xmlDoc.evaluate(xpath, xmlDoc, null, XPathResult.ANY_TYPE,null);
選取所有 title
下面的例子選取所有 title 節(jié)點(diǎn):
/bookstore/book/title
選取第一個(gè) book 的 title
下面的例子選取 bookstore 元素下面的第一個(gè) book 節(jié)點(diǎn)的 title:
/bookstore/book[1]/title
這里有一個(gè)問(wèn)題。上面的例子在 IE 和其他瀏覽器中輸出不同的結(jié)果。
IE5 以及更高版本將 [0] 視為第一個(gè)節(jié)點(diǎn),而根據(jù) W3C 的標(biāo)準(zhǔn),應(yīng)該是 [1]。
為了解決 IE5+ 中 [0] 和 [1] 的問(wèn)題,可以為 XPath 設(shè)置語(yǔ)言選擇(SelectionLanguage)。
下面的例子選取 bookstore 元素下面的第一個(gè) book 節(jié)點(diǎn)的 title:
xml.setProperty("SelectionLanguage","XPath"); xml.selectNodes("/bookstore/book[1]/title");
選取所有價(jià)格
下面的例子選取 price 節(jié)點(diǎn)中的所有文本:
/bookstore/book/price/text()
選取價(jià)格高于 35 的 price 節(jié)點(diǎn)
下面的例子選取價(jià)格高于 35 的所有 price 節(jié)點(diǎn):
/bookstore/book[price>35]/price
選取價(jià)格高于 35 的 title 節(jié)點(diǎn)
下面的例子選取價(jià)格高于 35 的所有 title 節(jié)點(diǎn):
/bookstore/book[price>35]/title
選取所有的 book 節(jié)點(diǎn)
下面的這個(gè)例子選取了 bookstore 元素下所有的 book 節(jié)點(diǎn):
xmlDoc.selectNodes("/bookstore/book")
假如您正在使用 IE 5 或更高的版本,可以。
選取第一個(gè) book 節(jié)點(diǎn)
下面的例子僅選取 bookstore 元素下第一個(gè) book 節(jié)點(diǎn):
xmlDoc.selectNodes("/bookstore/book[0]")
假如您正在使用 IE 5或更高的版本,可以。
注釋:IE 5 和 6 會(huì)把 [0] 作為第一個(gè)節(jié)點(diǎn)來(lái)執(zhí)行,但是根據(jù) W3C 的標(biāo)準(zhǔn),應(yīng)該使用 [1] !!
注釋:這個(gè)問(wèn)題在 IE 6 SP2 中被糾正了!
選取 price
下面的例子從所有的 price 節(jié)點(diǎn)選取文本:
xmlDoc.selectNodes("/bookstore/book/price/text()")
假如您正在使用 IE 5 或更高的版本,可以。
選取價(jià)格高于 35 的 price 價(jià)格
下面的例子會(huì)選取所有價(jià)格高于 35 的 price 節(jié)點(diǎn):
xmlDoc.selectNodes("/bookstore/book[price>35]/price")
假如您正在使用 IE 5 或更高的版本,可以。
選取價(jià)格高于 35 的 title 節(jié)點(diǎn)
下面的例子會(huì)選取所有價(jià)格高于 35 的 title 節(jié)點(diǎn):
xmlDoc.selectNodes("/bookstore/book[price>35]/title")
假如您正在使用 IE 5 或更高的版本,可以。