經常在工作中會使用到XPath的相關知識,但每次總會在一些關鍵的地方不記得或不太清楚,所以免不了每次總要查一些零碎的知識,感覺即很煩又浪費時間,所以對XPath歸納及總結一下。
相關教程:
在這篇文章中你將能學習到:
XPath簡介 XPath 路徑表達式詳解 XPath在DOM,XSLT及XQuery中的應用
XPath簡介
XPath是W3C的一個標准。它最主要的目的是為了在XML1.0或XML1.1文檔節點樹中定位節點所設計。目前有XPath1.0和XPath2.0兩個版本。其中Xpath1.0是1999年成為W3C標准,而XPath2.0標准的確立是在2007年。W3C關於XPath的英文詳細文檔請見: 。
XPath是一種表達式語言,它的返回值可能是節點,節點集合,原子值,以及節點和原子值的混合等。XPath2.0是XPath1.0的超集。它是對XPath1.0的擴展,它可以支持更加豐富的數據類型,並且XPath2.0保持了對XPath1.0的相對很好的向後兼容性,幾乎所有的XPath2.0的返回結果都可以和XPath1.0保持一樣。另外XPath2.0也是XSLT2.0和XQuery1.0的用於查詢定位節點的主表達式語言。XQuery1.0是對XPath2.0的擴展。關於在XSLT和XQuery中使用XPath表達式定位節點的知識在後面的實例中會有所介紹。
在學習XPath之前你應該對XML的節點,元素,屬性,原子值(文本),處理指令,注釋,根節點(文檔節點),命名空間以及對節點間的關系如:父(Parent),子(Children),兄弟(Sibling),先輩(Ancestor),後代(Descendant)等概念有所了解。這裡不在說明。
XPath路徑表達式
在本小節下面的內容中你將可以學習到:
路徑表達式語法 相對/絕對路徑 表達式上下文 謂詞(篩選表達式)及軸的概念 運算符及特殊字符 常用表達式實例 函數及說明
這裡給出一個實例Xml文件。下面的說明及實例都是基於該XML文件。
路徑表達式語法
路徑 = 相對路徑絕對路徑 XPath路徑表達式 = 步進表達式相對路徑 /步進表達式。 步進表達式=軸 節點測試 謂詞
說明:
其中軸表示步進表達式選擇的節點和當前上下文節點間的樹狀關系(層次關系),節點測試指定步進表達式選擇的節點名稱擴展名,謂詞即相當於過濾表達式以進一步過濾細化節點集。 謂詞可以是0個或多個。多個多個謂詞用邏輯操作符and, or連接。取邏輯非用not()函數。
請看一個典型的XPath查詢表達式:/messages/message//child::node()[@id=0],其中/messages/message是路徑(絕對路徑以/開始),child::是軸表示在子節點下選擇,node()是節點測試表示選擇所有的節點。[@id=0]是謂詞,表示選擇所有有屬性id並且值為0的節點。