Xpath

Xpath 路徑的寫法

1. 節點選取

表達式 描述
nodename 選取此節點的全部子節點
/ 從根節點選取
// 從匹配選擇的當前節點,而不考慮其餘節點
. 選取當前節點
.. 選取當前節點的父節點
@ 選取屬性
路徑表達式 結果
bookstore 選取 bookstore 元素的全部子節點。
/bookstore 選取根元素 bookstore。註釋:假如路徑起始於正斜槓( / ),則此路徑始終表明到某元素的絕對路徑!
bookstore/book 選取屬於 bookstore 的子元素的全部 book 元素。
//book 選取全部 book 子元素,而無論它們在文檔中的位置。
bookstore//book 選擇屬於 bookstore 元素的後代的全部 book 元素,而無論它們位於 bookstore 之下的什麼位置。
//@lang 選取名爲 lang 的全部屬性

例如

  1. 查找頁面根元素://node

  2. 查找頁面上全部的input元素://input函數

  3. 查找頁面上第一個form元素內的直接子input元素(即只包括form元素的下一級input元素,使用絕對路徑表示, 單/號)://form[1]/input性能

  4. 查找頁面上第一個form元素內的全部子input元素(只要在form元素內的input都算,無論還嵌套了多少個其餘標 籤,使用相對路徑表示,雙//號)://form[1]//inputspa

  5. 查找頁面上第一個form元素://form[1]code

  6. 查找頁面上id爲loginForm的form元素://form[@id='loginForm']orm

  7. 查找頁面上具備name屬性爲username的input元素://input[@name='username']xml

  8. 查找頁面上id爲loginForm的form元素下的第一個input元素://form[@id='loginForm']/input[1]ci

  9. 查找頁面具備name屬性爲contiune而且type屬性爲button的input元素://input[@name='continue'][@type='button']文檔

  10. 查找網頁中全部屬性爲id的元素 : //@id字符串

節點內容修飾

路徑表達式 結果
row 2 col 1 row 2 col 2
/bookstore/book[1] 選取屬於 bookstore 子元素的第一個 book 元素。
/bookstore/book[last()] 選取屬於 bookstore 子元素的最後一個 book 元素。
/bookstore/book[last()-1] 選取屬於 bookstore 子元素的倒數第二個 book 元素。
/bookstore/book[position()<3] 選取最前面的兩個屬於 bookstore 元素的子元素的 book 元素。
//title[@lang] 選取全部擁有名爲 lang 的屬性的 title 元素。
//title[@lang='eng'] 選取全部 title 元素,且這些元素擁有值爲 eng 的 lang 屬性。
/bookstore/book[price>35.00] 選取 bookstore 元素的全部 book 元素,且其中的 price 元素的值須大於 35.00。
/bookstore/book[price>35.00]/title 選取 bookstore 元素中的 book 元素的全部 title 元素,且其中的 price 元素的值須大於 35.00。

3.選取未知節點通配符

通配符 描述
* 匹配任何元素節點。
@* 匹配任何屬性節點。
node() 匹配任何類型的節點。

舉例

路徑表達式 結果
/bookstore/* 選取 bookstore 元素的全部子元素。
//* 選取文檔中的全部元素。
//title[@*] 選取全部帶有屬性的 title 元素。

4. 選取若干路徑

經過在路徑表達式中使用"|"運算符,表示選取若干個路徑
路徑表達式|結果
----------|------
//book/title | //book/price 選取 book 元素的全部 title 和 price 元素。
//title | //price 選取文檔中的全部 title 和 price 元素。
/bookstore/book/title | //price 選取屬於 bookstore 元素的 book 元素的全部 title 元素,以及文檔中全部的 price 元素。

5.關鍵字

舉例 舉例  
text() book/author/text()
string() book/author/string()
data() book/author/data()
. book/author/.

舉例

XML例子

<book>
    <author>Tom<em><John></em></author>
   <pricing>
        <price>20</price>
        <discount>0.8</discount>
    </pricing>
</book>

text()

**常常在Xpath表達式最後看到text(),它僅僅是返回所指元素的文本內容

爬取的Xpath格式爲book/author/text()
爬取下來的內容是Tom cat
其中John不屬於author的直接節點內容

string()
string()函數會獲得所指元素的全部節點文本內容,這些文本講會被拼接成一個字符串。

爬取的xpath格式爲book/author/string()
爬取下來的內容是Tom John cat
author頭到尾部中間全部的內容都爬出來

data()

大多數時候,data()函數和string()函數通用,並且不建議常常使用data()函數,有數據代表,該函數會影響XPath的性能。

爬取的xpath格式爲book/pricing/data()
爬取下來的內容是返回分開的20和0.8
他們的類型並非字符串而是xs:anyAtomicType,因而就可使用數學函數作必定操做。

爬取內容都爲數字的時候只能使用data(),不能使用text()或 string(),由於XPath不支持字符串作數學運算。

相關文章
相關標籤/搜索