xpath筆記

XPath即爲XML路徑語言,它是一種用來肯定XML(標準通用標記語言的子集)文檔中某部分位置的語言。XPath基於XML的樹狀結構,提供在數據結構樹中找尋節點的能力。起初 XPath 的提出的初衷是將其做爲一個通用的、介於XPointer與XSLT間的語法模型。可是 XPath 很快的被開發者採用來看成小型查詢語言。node

簡單說,xpath就是: 選擇XML文件中節點的方法。markdown

所謂節點(node),就是XML文件的最小構成單位,一共分紅7種。數據結構

  • element(元素節點)


- attribute(屬性節點)spa

  • text (文本節點)code

  • namespace (名稱空間節點)xml

  • processing-instruction (處理命令節點)element

  • comment (註釋節點)開發

  • root (根節點)文檔

xpath表達式的基本格式

xpath經過」路徑表達式」(Path Expression)來選擇節點。在形式上,」路徑表達式」與傳統的文件系統很是相似.it

  1. 斜槓(/)做爲路徑內部的分割符。

  2. 同一個節點有絕對路徑和相對路徑兩種寫法。

  3. 絕對路徑(absolute path)必須用」/」起首,後面緊跟根節點,好比/step/step/…。

  4. 相對路徑(relative path)則是除了絕對路徑之外的其餘寫法,好比 step/step,也就是不使用」/」起首。

  5. 「.」表示當前節點。

  6. 「..」表示當前節點的父節點

選擇節點的基本規則

  • nodename(節點名稱):表示選擇該節點的全部子節點

  • 「/」:表示選擇根節點

  • 「//」:表示選擇任意位置的某個節點

  • 「@」: 表示選擇某個屬性

選擇節點的實例

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
  <book>
    <title lang="eng">Harry Potter</title>
    <price>29.99</price>
  </book>
  <book>
    <title lang="eng">Learning XML</title>
    <price>39.95</price>
  </book>
</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)

所謂」謂語條件」,就是對路徑表達式的附加條件。

全部的條件,都寫在方括號」[]」中,表示對節點進行進一步的篩選。

  1. /bookstore/book[1] :表示選擇bookstore的第一個book子元素。

  2. /bookstore/book[last()] :表示選擇bookstore的最後一個book子元素。

  3. /bookstore/book[last()-1] :表示選擇bookstore的倒數第二個book子元素。

  4. /bookstore/book[position()<3] :表示選擇bookstore的前兩個book子元素。

  5. //title[@lang] :表示選擇全部具備lang屬性的title節點。

  6. //title[@lang='eng'] :表示選擇全部lang屬性的值等於」eng」的title節點。

  7. /bookstore/book[price] :表示選擇bookstore的book子元素,且被選中的book元素必須帶有price子元素。

  8. /bookstore/book[price>35.00] :表示選擇bookstore的book子元素,且被選中的book元素的price子元素值必須大於35。

  9. /bookstore/book[price>35.00]/title :表示在例14結果集中,選擇title子元素。

  10. /bookstore/book/price[.>35.00] :表示選擇值大於35的」/bookstore/book」的price子元素。

通配符

  • 「*」表示匹配任何元素節點。

  • 「@*」表示匹配任何屬性值。

  • node()表示匹配任何類型的節點

    1. //* :選擇文檔中的全部元素節點。

    2. /*/* :表示選擇全部第二層的元素節點。

    3. /bookstore/* :表示選擇bookstore的全部元素子節點。

    4. //title[@*] :表示選擇全部帶有屬性的title元素。

選擇多個路徑

用」|」選擇多個並列的路徑。

  1. //book/title | //book/price :表示同時選擇book元素的title子元素和price子元素。
相關文章
相關標籤/搜索