https://www.cnblogs.com/fgzhang/p/6645575.html
XPath 路徑表達(dá)式
XPath 使用路徑表達(dá)式來(lái)選取 Html 中的節(jié)點(diǎn)或者節(jié)點(diǎn)集。
表達(dá)式描述
nodename選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn)橱乱。
/從根節(jié)點(diǎn)選取俱病。
//從匹配選擇的當(dāng)前節(jié)點(diǎn)選擇文檔中的節(jié)點(diǎn),而不考慮它們的位置搂漠。
.選取當(dāng)前節(jié)點(diǎn)迂卢。
..選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)。
@選取屬性桐汤。
HTML 實(shí)例
我們將在下面的例子中使用這個(gè) HTML
<html>
? <bookstore>
? ? <book id="book1">
? ? ? <title lang="eng">學(xué)習(xí)xpath</title>
? ? ? <price id="test1">29.99</price>
? ? </book>
? ? <book id="book2">
? ? ? <title lang="eng">學(xué)習(xí)xpath</title>
? ? ? <price id="test2">39.95</price>
? ? </book>
? </bookstore>
</html>
實(shí)例
在下面的表格中而克,我們已列出了一些路徑表達(dá)式以及表達(dá)式的結(jié)果:
路徑表達(dá)式結(jié)果
//bookstore選取 bookstore 元素的所有子節(jié)點(diǎn)。
//bookstore/book選取屬于 bookstore 的子元素的所有 book 元素怔毛。
//book選取所有 book 子元素员萍,而不管它們?cè)谖臋n中的位置。
//bookstore//book選擇屬于 bookstore 元素的后代的所有 book 元素拣度,而不管它們位于 bookstore 之下的什么位置碎绎。
//book[@lang]選取包含 lang 的有屬性所有book元素,而不管它們?cè)谖臋n中的位置抗果。
常用的XPath 軸
軸可定義相對(duì)于當(dāng)前節(jié)點(diǎn)的節(jié)點(diǎn)集筋帖。
軸名稱(chēng)結(jié)果
ancestor選取當(dāng)前節(jié)點(diǎn)的所有先輩(父、祖父等)冤馏。
parent選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)日麸。
following-sibling選取當(dāng)前節(jié)點(diǎn)之后的所有同級(jí)節(jié)點(diǎn)。
preceding-sibling選取當(dāng)前節(jié)點(diǎn)之前的所有同級(jí)節(jié)點(diǎn)逮光。
假如我們需要定位:
第一個(gè)book節(jié)點(diǎn)的title代箭,因?yàn)榇颂幍?個(gè)title標(biāo)簽的所有屬性都一樣,所以我們需要借助它鄰近的元素定位到它涕刚。
//price[@id='test1']/preceding-sibling::title
xpath解讀:首先找到id是test1的price節(jié)點(diǎn)梢卸,然后找到它之前的同級(jí)title節(jié)點(diǎn)。
//book[@id='book1']/title
xpath解讀:首先找到id是book1的book節(jié)點(diǎn)副女,然后找到它直接子節(jié)點(diǎn)title蛤高。
其它軸實(shí)例:
//price/parent::book
xpath解讀:定位price的直接父級(jí)節(jié)點(diǎn)book
//title/following-sibling:
rice
xpath解讀:定位title后面同級(jí)節(jié)點(diǎn)price
//title//ancestor::book
xpath解讀:定位title的所有父級(jí)、祖父級(jí)的book節(jié)點(diǎn)
xpath的/和//區(qū)別:
/是僅僅查找它直接父節(jié)點(diǎn)或者子節(jié)點(diǎn)
//是查找它所有的父級(jí)和祖父級(jí)...節(jié)點(diǎn)
詳情請(qǐng)查閱: