經(jīng)常在工作中會使用到XPath的相關(guān)知識,但每次總會在一些關(guān)鍵的地方不記得或不太清楚,所以免不了每次總要查一些零碎的知識,感覺即很煩又浪費(fèi)時(shí)間,所以對XPath歸納及總結(jié)一下。
在這篇文章中你將能學(xué)習(xí)到:
- XPath簡介
- XPath 路徑表達(dá)式詳解
- XPath在DOM,XSLT及XQuery中的應(yīng)用
XPath簡介
XPath是W3C的一個(gè)標(biāo)準(zhǔn)。它最主要的目的是為了在XML1.0或XML1.1文檔節(jié)點(diǎn)樹中定位節(jié)點(diǎn)所設(shè)計(jì)。目前有XPath1.0和XPath2.0兩個(gè)版本。其中Xpath1.0是1999年成為W3C標(biāo)準(zhǔn),而XPath2.0標(biāo)準(zhǔn)的確立是在2007年。W3C關(guān)于XPath的英文詳細(xì)文檔請見:http://www.w3.org/TR/xpath20/ 。
XPath是一種表達(dá)式語言,它的返回值可能是節(jié)點(diǎn),節(jié)點(diǎn)集合,原子值,以及節(jié)點(diǎn)和原子值的混合等。XPath2.0是XPath1.0的超集。它是對XPath1.0的擴(kuò)展,它可以支持更加豐富的數(shù)據(jù)類型,并且XPath2.0保持了對XPath1.0的相對很好的向后兼容性,幾乎所有的XPath2.0的返回結(jié)果都可以和XPath1.0保持一樣。另外XPath2.0也是XSLT2.0和XQuery1.0的用于查詢定位節(jié)點(diǎn)的主表達(dá)式語言。XQuery1.0是對XPath2.0的擴(kuò)展。關(guān)于在XSLT和XQuery中使用XPath表達(dá)式定位節(jié)點(diǎn)的知識在后面的實(shí)例中會有所介紹。
在學(xué)習(xí)XPath之前你應(yīng)該對XML的節(jié)點(diǎn),元素,屬性,原子值(文本),處理指令,注釋,根節(jié)點(diǎn)(文檔節(jié)點(diǎn)),命名空間以及對節(jié)點(diǎn)間的關(guān)系如:父(Parent),子(Children),兄弟(Sibling),先輩(Ancestor),后代(Descendant)等概念有所了解。這里不在說明。
XPath路徑表達(dá)式
在本小節(jié)下面的內(nèi)容中你將可以學(xué)習(xí)到:
- 路徑表達(dá)式語法
- 相對/絕對路徑
- 表達(dá)式上下文
- 謂詞(篩選表達(dá)式)及軸的概念
- 運(yùn)算符及特殊字符
- 常用表達(dá)式實(shí)例
- 函數(shù)及說明
這里給出一個(gè)實(shí)例Xml文件。下面的說明及實(shí)例都是基于該XML文件。
路徑表達(dá)式語法:
- 路徑 = 相對路徑 | 絕對路徑
- XPath路徑表達(dá)式 = 步進(jìn)表達(dá)式 | 相對路徑 "/"步進(jìn)表達(dá)式。
- 步進(jìn)表達(dá)式=軸 節(jié)點(diǎn)測試 謂詞
說明:
- 其中軸表示步進(jìn)表達(dá)式選擇的節(jié)點(diǎn)和當(dāng)前上下文節(jié)點(diǎn)間的樹狀關(guān)系(層次關(guān)系),節(jié)點(diǎn)測試指定步進(jìn)表達(dá)式選擇的節(jié)點(diǎn)名稱擴(kuò)展名,謂詞即相當(dāng)于過濾表達(dá)式以進(jìn)一步過濾細(xì)化節(jié)點(diǎn)集。
- 謂詞可以是0個(gè)或多個(gè)。多個(gè)多個(gè)謂詞用邏輯操作符and, or連接。取邏輯非用not()函數(shù)。
請看一個(gè)典型的XPath查詢表達(dá)式:/messages/message//child::node()[@id=0],其中/messages/message是路徑(絕對路徑以"/"開始),child::是軸表示在子節(jié)點(diǎn)下選擇,node()是節(jié)點(diǎn)測試表示選擇所有的節(jié)點(diǎn)。[@id=0]是謂詞,表示選擇所有有屬性id并且值為0的節(jié)點(diǎn)。
出處:亂碼
責(zé)任編輯:bluehearts
上一頁 下一頁 XPath詳解,總結(jié) [2]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|