Xpath語法


Xpath簡介

       XPath即爲XML路徑語言,它是一種用來確定XML(標準通用標記語言的子集)文檔中某部分位置的語言。XPath基於XML的樹狀結構,有不同類型的節點,包括元素節點,屬性節點和文本節點,提供在數據結構樹中找尋節點的能力。起初 XPath 的提出的初衷是將其作爲一個通用的、介於XPointerXSLT間的語法模型。但是 XPath 很快的被開發者採用來當作小型查詢語言。

  簡單來說我們通過Xpath可以獲取XML中的指定元素和指定節點的值。在網絡爬蟲中我們通過會把爬蟲獲取的HTML數據轉換成XML結構,然後通過XPath解析,獲取我們想要的結果。

接下來爲大家分享以下xpath的表達式以及用法。

 

一.選取節點

Xpath使用路徑表達式在XML文檔中選取節點。節點是通過沿着路徑來選取的,通過路徑可以找到我們想要的節點或者節點範圍。

表達式 

描述

用法

說明

nodename

選取此節點的所有子節點。

xpath(‘span’)

選取span元素的所有子節點

/

從根節點選取

xpath(‘/div’)

從根節點上選取div節點

//

從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。

xpath(‘//div’)

從當前節點選取含有div節點的標籤

.

選取當前節點

xpath(‘./div’)

選取當前節點下的div標籤

..

選取當前節點的父節點

xpath(‘../’)

回到上一級節點

@

選取屬性

xpath(“//div[@id=’1001’]”)

獲取div標籤中,含有ID屬性且值爲1001的標籤

 

.謂語(Predicates

謂語用來查找某個特定的節點或者包含某個指定的值的節點。

謂語被嵌在方括號中。

表達式描述述

用法說明

/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

 

通配符

XPath 通配符可用來選取未知的 XML 元素,通配指定節點。

 表達式

描述

用法

說明

匹配任何元素節點

xpath/div/*

選取div下的所有子節點

@*

匹配任何屬性節點

xpath(/div[@*])

選取所有帶屬性的div節點

node()

匹配任何類型的節點

xpath(//div[@class=’tb_cls’]).node()

選擇標籤爲div且類屬性爲tb_cls的所有標籤

 

四.多路徑選擇

通過在路徑表達式中使用“|”運算符,您可以選取若干個路徑。

用法

說明

xpath//book/title |//book/price

選取 book 元素的所有 title price 元素。  

xpath//title| //price

選取文檔中的所有 title price 元素

 

五.XPath

軸可定義相對於當前節點的節點集。

表達式

描述

用法

說明

ancestor

選取當前節點的所有先輩(父、祖父等)

xpath(//div[@id=’123’]/ancestor::*)

選擇標籤爲divID號爲123的所有先輩標籤

ancestor-or-self

選取當前節點的所有先輩(父、祖父等)以及當前節點本身

xpath(//div[@id=’123’]/ancestor-or-self::*)

選擇標籤爲divID號爲123的所有先輩標籤且包含自己

attribute

選取當前節點的所有屬性

xpath(//div[@id=’123’]/attribute::class)

選擇標籤爲divID號爲123的類屬性名稱

child

選取當前節點的所有子元素

xpath(//div[@id=’123’]/child::book)

選擇標籤爲divID號爲123的所有子元素的爲book 節點

descendant

選取當前節點的所有後代元素(子、孫等)

xpath(./descendant::*)

返回當前節點的所有後代節點(子節點、孫節點)

following

選取文檔中當前節點結束標籤後的所有節點

xpath(./following::*)

選取文檔中當前節點結束標籤後的所有節點

parent

選取當前節點的父節點

xpath(./parent::*)

選取當前節點的父節點

preceding

選取文檔中當前節點的開始標籤之前的所有節點

xpath(//div[@id=’123’]/preceding::*)

選擇標籤爲divID號爲123的開始標籤之前的所有節點

preceding-sibling

選取當前節點之前的所有同級節點

xpath(//div[@id=’123’]/preceding-sibling::*)

選擇標籤爲divID號爲123的之前的所有同級節點

self

選取當前節點

xpath(./self::*)

選取當前節點

 

六.XPath 運算符

表達式

描述

用法

說明

+

加法  

6 + 4

10

-

減法

6 – 4

2

*

乘法

6 * 4

24

div

除法

8 div   4

2

=

等於

price=9.80

如果 price 9.80,則返回 true。如果 price 9.90,則返回 false

!=

不等於

price!=9.80

如果 price 9.90,則返回 true。如果 price 9.80,則返回 false

<3

小於

price<9.80

如果 price 9.00,則返回 true。如果 price 9.90,則返回 false

<=

小於或等於

price<=9.80

如果 price 9.00,則返回 true。如果 price 9.90,則返回 false

大於

price>9.80

如果 price 9.90,則返回 true。如果 price 9.80,則返回 false

>=

大於或等於

price>=9.80

如果 price 9.90,則返回 true。如果 price 9.70,則返回 false

or

price=9.80   or price=9.70

如果 price 9.80,則返回 true。如果 price 9.50,則返回 false

and

price>9.00   and price<9.90

如果 price 9.80,則返回 true。如果 price 8.50,則返回 false

mod

計算除法的餘數

5 mod   2

1

 

七.常用的功能函數

使用功能函數能夠更好的進行模糊搜索

表達式

描述

用法

說明

starts-with

選取id值以ma開頭的div節點

xpath(‘//div[starts-with(@id,”ma”)]‘)

選取id值以ma開頭的div節點

contains

選取id值包含madiv節點

xpath(‘//div[contains(@id,”ma”)]‘)

選取id值包含madiv節點

and

選取id值包含maindiv節點

xpath(‘//div[contains(@id,”ma”)   and contains(@id,”in”)]‘)

選取id值包含maindiv節點

text()

選取節點文本包含madiv節點

xpath(‘//div[contains(text(),”ma”)]‘)

選取節點文本包含madiv節點

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章