溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Xpath語(yǔ)法

發(fā)布時(shí)間:2020-05-16 05:53:09 來(lái)源:網(wǎng)絡(luò) 閱讀:1017 作者:NewFate1 欄目:編程語(yǔ)言


Xpath簡(jiǎn)介

       XPath即為XML路徑語(yǔ)言,它是一種用來(lái)確定XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的子集)文檔中某部分位置的語(yǔ)言。XPath基于XML的樹(shù)狀結(jié)構(gòu),有不同類型的節(jié)點(diǎn),包括元素節(jié)點(diǎn),屬性節(jié)點(diǎn)和文本節(jié)點(diǎn),提供在數(shù)據(jù)結(jié)構(gòu)樹(shù)中找尋節(jié)點(diǎn)的能力。起初 XPath 的提出的初衷是將其作為一個(gè)通用的、介于XPointerXSLT間的語(yǔ)法模型。但是 XPath 很快的被開(kāi)發(fā)者采用來(lái)當(dāng)作小型查詢語(yǔ)言。

  簡(jiǎn)單來(lái)說(shuō)我們通過(guò)Xpath可以獲取XML中的指定元素和指定節(jié)點(diǎn)的值。在網(wǎng)絡(luò)爬蟲(chóng)中我們通過(guò)會(huì)把爬蟲(chóng)獲取的HTML數(shù)據(jù)轉(zhuǎn)換成XML結(jié)構(gòu),然后通過(guò)XPath解析,獲取我們想要的結(jié)果。

接下來(lái)為大家分享以下xpath的表達(dá)式以及用法。

 

一.選取節(jié)點(diǎn)

Xpath使用路徑表達(dá)式在XML文檔中選取節(jié)點(diǎn)。節(jié)點(diǎn)是通過(guò)沿著路徑來(lái)選取的,通過(guò)路徑可以找到我們想要的節(jié)點(diǎn)或者節(jié)點(diǎn)范圍。

表達(dá)式 

描述

用法

說(shuō)明

nodename

選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn)。

xpath(‘span’)

選取span元素的所有子節(jié)點(diǎn)

/

從根節(jié)點(diǎn)選取

xpath(‘/div’)

從根節(jié)點(diǎn)上選取div節(jié)點(diǎn)

//

從匹配選擇的當(dāng)前節(jié)點(diǎn)選擇文檔中的節(jié)點(diǎn),而不考慮它們的位置。

xpath(‘//div’)

從當(dāng)前節(jié)點(diǎn)選取含有div節(jié)點(diǎn)的標(biāo)簽

.

選取當(dāng)前節(jié)點(diǎn)

xpath(‘./div’)

選取當(dāng)前節(jié)點(diǎn)下的div標(biāo)簽

..

選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)

xpath(‘../’)

回到上一級(jí)節(jié)點(diǎn)

@

選取屬性

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

獲取div標(biāo)簽中,含有ID屬性且值為1001的標(biāo)簽

 

.謂語(yǔ)(Predicates

謂語(yǔ)用來(lái)查找某個(gè)特定的節(jié)點(diǎn)或者包含某個(gè)指定的值的節(jié)點(diǎn)。

謂語(yǔ)被嵌在方括號(hào)中。

表達(dá)式描述述

用法說(shuō)明

/bookstore/book[1]

 選取屬于 bookstore 子元素的第一個(gè) book 元素。

/bookstore/book[last()]

 選取屬于 bookstore 子元素的最后一個(gè) book 元素。

/bookstore/book[last()-1]

 選取屬于 bookstore 子元素的倒數(shù)第二個(gè) book 元素。

/bookstore/book[position()<3]

 選取最前面的兩個(gè)屬于 bookstore 元素的子元素的 book 元素。

//title[@lang]

 選取所有擁有名為 lang 的屬性的 title 元素。

//title[@lang='eng']

 選取所有 title 元素,且這些元素?fù)碛兄禐?/span> 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 通配符可用來(lái)選取未知的 XML 元素,通配指定節(jié)點(diǎn)。

 表達(dá)式

描述

用法

說(shuō)明

匹配任何元素節(jié)點(diǎn)

xpath/div/*

選取div下的所有子節(jié)點(diǎn)

@*

匹配任何屬性節(jié)點(diǎn)

xpath(/div[@*])

選取所有帶屬性的div節(jié)點(diǎn)

node()

匹配任何類型的節(jié)點(diǎn)

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

選擇標(biāo)簽為div且類屬性為tb_cls的所有標(biāo)簽

 

四.多路徑選擇

通過(guò)在路徑表達(dá)式中使用“|”運(yùn)算符,您可以選取若干個(gè)路徑。

用法

說(shuō)明

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

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

xpath//title| //price

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

 

五.XPath

軸可定義相對(duì)于當(dāng)前節(jié)點(diǎn)的節(jié)點(diǎn)集。

表達(dá)式

描述

用法

說(shuō)明

ancestor

選取當(dāng)前節(jié)點(diǎn)的所有先輩(父、祖父等)

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

選擇標(biāo)簽為divID號(hào)為123的所有先輩標(biāo)簽

ancestor-or-self

選取當(dāng)前節(jié)點(diǎn)的所有先輩(父、祖父等)以及當(dāng)前節(jié)點(diǎn)本身

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

選擇標(biāo)簽為divID號(hào)為123的所有先輩標(biāo)簽且包含自己

attribute

選取當(dāng)前節(jié)點(diǎn)的所有屬性

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

選擇標(biāo)簽為divID號(hào)為123的類屬性名稱

child

選取當(dāng)前節(jié)點(diǎn)的所有子元素

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

選擇標(biāo)簽為divID號(hào)為123的所有子元素的為book 節(jié)點(diǎn)

descendant

選取當(dāng)前節(jié)點(diǎn)的所有后代元素(子、孫等)

xpath(./descendant::*)

返回當(dāng)前節(jié)點(diǎn)的所有后代節(jié)點(diǎn)(子節(jié)點(diǎn)、孫節(jié)點(diǎn))

following

選取文檔中當(dāng)前節(jié)點(diǎn)結(jié)束標(biāo)簽后的所有節(jié)點(diǎn)

xpath(./following::*)

選取文檔中當(dāng)前節(jié)點(diǎn)結(jié)束標(biāo)簽后的所有節(jié)點(diǎn)

parent

選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)

xpath(./parent::*)

選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)

preceding

選取文檔中當(dāng)前節(jié)點(diǎn)的開(kāi)始標(biāo)簽之前的所有節(jié)點(diǎn)

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

選擇標(biāo)簽為divID號(hào)為123的開(kāi)始標(biāo)簽之前的所有節(jié)點(diǎn)

preceding-sibling

選取當(dāng)前節(jié)點(diǎn)之前的所有同級(jí)節(jié)點(diǎn)

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

選擇標(biāo)簽為divID號(hào)為123的之前的所有同級(jí)節(jié)點(diǎn)

self

選取當(dāng)前節(jié)點(diǎn)

xpath(./self::*)

選取當(dāng)前節(jié)點(diǎn)

 

六.XPath 運(yùn)算符

表達(dá)式

描述

用法

說(shuō)明

+

加法  

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

計(jì)算除法的余數(shù)

5 mod   2

1

 

七.常用的功能函數(shù)

使用功能函數(shù)能夠更好的進(jìn)行模糊搜索

表達(dá)式

描述

用法

說(shuō)明

starts-with

選取id值以ma開(kāi)頭的div節(jié)點(diǎn)

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

選取id值以ma開(kāi)頭的div節(jié)點(diǎn)

contains

選取id值包含madiv節(jié)點(diǎn)

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

選取id值包含madiv節(jié)點(diǎn)

and

選取id值包含maindiv節(jié)點(diǎn)

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

選取id值包含maindiv節(jié)點(diǎn)

text()

選取節(jié)點(diǎn)文本包含madiv節(jié)點(diǎn)

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

選取節(jié)點(diǎn)文本包含madiv節(jié)點(diǎn)

 


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI