XPath 路徑表達式
XPath 使用路徑表達式來選取 Html 中的節點或者節點集。
表達式
|
描述
|
---|---|
nodename | 選取此節點的所有子節點。 |
/ | 從根節點選取。 |
// | 從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。 |
. | 選取當前節點。 |
.. | 選取當前節點的父節點。 |
@ | 選取屬性。 |
HTML 實例
我們將在下面的例子中使用這個 HTML
<html> <bookstore> <book id="book1"> <title lang="eng">學習xpath</title>
<price id="test1">29.99</price>
</book> <book id="book2"> <title lang="eng">學習xpath</title> <price id="test2">39.95</price>
</book> </bookstore>
</html>
實例
在下面的表格中,我們已列出了一些路徑表達式以及表達式的結果:
路徑表達式
|
結果
|
---|---|
//bookstore | 選取 bookstore 元素的所有子節點。 |
//bookstore/book | 選取屬於 bookstore 的子元素的所有 book 元素。 |
//book | 選取所有 book 子元素,而不管它們在文檔中的位置。 |
//bookstore//book | 選擇屬於 bookstore 元素的后代的所有 book 元素,而不管它們位於 bookstore 之下的什么位置。 |
//book[@lang] | 選取包含 lang 的有屬性所有book元素,而不管它們在文檔中的位置。 |
常用的XPath 軸
軸可定義相對於當前節點的節點集。
軸名稱
|
結果
|
---|---|
ancestor | 選取當前節點的所有先輩(父、祖父等)。 |
parent | 選取當前節點的父節點。 |
following-sibling | 選取當前節點之后的所有同級節點。 |
preceding-sibling | 選取當前節點之前的所有同級節點。 |
假如我們需要定位:
第一個book節點的title,因為此處的2個title標簽的所有屬性都一樣,所以我們需要借助它鄰近的元素定位到它。
//price[@id='test1']/preceding-sibling::title
xpath解讀:首先找到id是test1的price節點,然后找到它之前的同級title節點。
//book[@id='book1']/title
xpath解讀:首先找到id是book1的book節點,然后找到它直接子節點title。
其它軸實例:
//price/parent::book
xpath解讀:定位price的直接父級節點book
//title/following-sibling:rice
xpath解讀:定位title后面同級節點price
//title//ancestor::book
xpath解讀:定位title的所有父級、祖父級的book節點
xpath的/和//區別:
/是僅僅查找它直接父節點或者子節點
//是查找它所有的父級和祖父級...節點
詳情請查閱: