簡單說,xpath就是選擇xml檔案中節點的方法。
所謂節點(node),就是xml檔案的最小構成機關,一共分成7種。
- element(元素節點) - attribute(屬性節點) - text (文本節點) - namespace (名稱空間節點) - processing-instruction (處理指令節點) - comment (注釋節點) - root (根節點)
xpath可以用來選擇這7種節點。不過,下面的筆記隻涉及最常用的第一種element(元素節點),是以可以将下文中的節點和元素視為同義詞。
一、xpath表達式的基本格式
xpath通過"路徑表達式"(path expression)來選擇節點。在形式上,"路徑表達式"與傳統的檔案系統非常類似。
# 斜杠(/)作為路徑内部的分割符。 # 同一個節點有絕對路徑和相對路徑兩種寫法。 # 絕對路徑(absolute path)必須用"/"起首,後面緊跟根節點,比如/step/step/...。 # 相對路徑(relative path)則是除了絕對路徑以外的其他寫法,比如 step/step,也就是不使用"/"起首。 # "."表示目前節點。 # ".."表示目前節點的父節點
二、選擇節點的基本規則
- nodename(節點名稱):表示選擇該節點的所有子節點 - "/":表示選擇根節點 - "//":表示選擇任意位置的某個節點 - "@": 表示選擇某個屬性
三、選擇節點的執行個體
先看一個xml執行個體文檔。
<?xml version="1.0" encoding="iso-8859-1"?> <bookstore> <book> <title lang="eng">harry potter</title> <price>29.99</price> </book> <title lang="eng">learning xml</title> <price>39.95</price> </bookstore>
[例1]
bookstore :選取 bookstore 元素的所有子節點。
[例2]
/bookstore :選取根節點bookstore,這是絕對路徑寫法。
[例3]
bookstore/book :選取所有屬于 bookstore 的子元素的 book元素,這是相對路徑寫法。
[例4]
//book :選擇所有 book 子元素,而不管它們在文檔中的位置。
[例5]
bookstore//book :選擇所有屬于 bookstore 元素的後代的 book 元素,而不管它們位于 bookstore 之下的什麼位置。
[例6]
//@lang :選取所有名為 lang 的屬性。
四、xpath的謂語條件(predicate)
所謂"謂語條件",就是對路徑表達式的附加條件。
所有的條件,都寫在方括号"[]"中,表示對節點進行進一步的篩選。
[例7]
/bookstore/book[1] :表示選擇bookstore的第一個book子元素。
[例8]
/bookstore/book[last()] :表示選擇bookstore的最後一個book子元素。
[例9]
/bookstore/book[last()-1] :表示選擇bookstore的倒數第二個book子元素。
[例10]
/bookstore/book[position()<3] :表示選擇bookstore的前兩個book子元素。
[例11]
//title[@lang] :表示選擇所有具有lang屬性的title節點。
[例12]
//title[@lang='eng'] :表示選擇所有lang屬性的值等于"eng"的title節點。
[例13]
/bookstore/book[price] :表示選擇bookstore的book子元素,且被選中的book元素必須帶有price子元素。
[例14]
/bookstore/book[price>35.00] :表示選擇bookstore的book子元素,且被選中的book元素的price子元素值必須大于35。
[例15]
/bookstore/book[price>35.00]/title :表示在例14結果集中,選擇title子元素。
[例16]
/bookstore/book/price[.>35.00] :表示選擇值大于35的"/bookstore/book"的price子元素。
五、通配符
# "*"表示比對任何元素節點。 # "@*"表示比對任何屬性值。 # node()表示比對任何類型的節點。
[例17]
//* :選擇文檔中的所有元素節點。
[例18]
/*/* :表示選擇所有第二層的元素節點。
[例19]
/bookstore/* :表示選擇bookstore的所有元素子節點。
[例20]
//title[@*] :表示選擇所有帶有屬性的title元素。
六、選擇多個路徑
用"|"選擇多個并列的路徑。
[例21]
//book/title | //book/price :表示同時選擇book元素的title子元素和price子元素。
【相關文章】
(完)