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