xPath 用法總結(jié)整理

一、xpath介紹

XPath 是一門(mén)在 XML 文檔中查找信息的語(yǔ)言睬罗。XPath 用于在 XML 文檔中通過(guò)元素和屬性進(jìn)行導(dǎo)航搪锣。

  • XPath 使用路徑表達(dá)式在 XML 文檔中進(jìn)行導(dǎo)航
  • XPath 包含一個(gè)標(biāo)準(zhǔn)函數(shù)庫(kù)
  • XPath 是 XSLT 中的主要元素
  • XPath 是一個(gè) W3C 標(biāo)準(zhǔn)
    節(jié)點(diǎn)
    在 XPath 中汗茄,有七種類(lèi)型的節(jié)點(diǎn):元素被饿、屬性四康、文本、命名空間狭握、處理指令闪金、注釋以及文檔(根)節(jié)點(diǎn)。XML 文檔是被作為節(jié)點(diǎn)樹(shù)來(lái)對(duì)待的论颅。
    請(qǐng)看下面這個(gè) XML 文檔:
<?xml version="1.0" encoding="UTF-8"?>

<bookstore>
  <book>
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
</bookstore> 

上面的XML文檔中的節(jié)點(diǎn)例子:

<bookstore> (文檔節(jié)點(diǎn))
<author>J K. Rowling</author> (元素節(jié)點(diǎn))
lang="en" (屬性節(jié)點(diǎn))

XPath 術(shù)語(yǔ)

概念 解釋 舉例
基本值(或稱(chēng)原子值哎垦,Atomic value) 基本值是無(wú)父或無(wú)子的節(jié)點(diǎn) J K. Rowling,"en"
項(xiàng)目(Item) 項(xiàng)目是基本值或者節(jié)點(diǎn)
節(jié)點(diǎn)關(guān)系-父(Parent) 每個(gè)元素以及屬性都有一個(gè)父嗅辣。 在上面的例子中撼泛,book 元素是 title挠说、author澡谭、year 以及 price 元素的父:
節(jié)點(diǎn)關(guān)系-子(Children) 元素節(jié)點(diǎn)可有零個(gè)、一個(gè)或多個(gè)子损俭。 在上面的例子中蛙奖,title、author杆兵、year 以及 price 元素都是 book 元素的子:
節(jié)點(diǎn)關(guān)系-同胞(Sibling) 擁有相同的父的節(jié)點(diǎn)雁仲。 在上面的例子中,title琐脏、author攒砖、year 以及 price 元素都是同胞:
節(jié)點(diǎn)關(guān)系-先輩(Ancestor) 某節(jié)點(diǎn)的父、父的父日裙,等等吹艇。 在上面的例子中,title 元素的先輩是 book 元素和 bookstore 元素昂拂。
后代(Descendant) 某個(gè)節(jié)點(diǎn)的子受神,子的子,等等格侯。 在上面的例子中鼻听,bookstore 的后代是 book财著、title、author撑碴、year 以及 price 元素撑教。

二、xpath語(yǔ)法

路徑表達(dá)式語(yǔ)法:

  1. 路徑 = 相對(duì)路徑 | 絕對(duì)路徑
  2. XPath路徑表達(dá)式 = 步進(jìn)表達(dá)式 | 相對(duì)路徑 "/"步進(jìn)表達(dá)式灰羽。
  3. 步進(jìn)表達(dá)式=軸 節(jié)點(diǎn)測(cè)試 謂詞
    說(shuō)明:
  • 其中軸表示步進(jìn)表達(dá)式選擇的節(jié)點(diǎn)和當(dāng)前上下文節(jié)點(diǎn)間的樹(shù)狀關(guān)系(層次關(guān)系)驮履,節(jié)點(diǎn)測(cè)試指定步進(jìn)表達(dá)式選擇的節(jié)點(diǎn)名稱(chēng)擴(kuò)展名,謂詞即相當(dāng)于過(guò)濾表達(dá)式以進(jìn)一步過(guò)濾細(xì)化節(jié)點(diǎn)集廉嚼。
  • 謂詞可以是0個(gè)或多個(gè)玫镐。多個(gè)多個(gè)謂詞用邏輯操作符and, or連接怠噪。取邏輯非用not()函數(shù)恐似。
  • 請(qǐng)看一個(gè)典型的XPath查詢(xún)表達(dá)式:/messages/message//child::node()[@id=0],其中/messages/message是路徑(絕對(duì)路徑以"/"開(kāi)始)傍念,child::是軸表示在子節(jié)點(diǎn)下選擇罢荡,node()是節(jié)點(diǎn)測(cè)試表示選擇所有的節(jié)點(diǎn)酱讶。[@id=0]是謂詞,表示選擇所有有屬性id并且值為0的節(jié)點(diǎn)。

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

XPath 使用路徑表達(dá)式在 XML 文檔中選取節(jié)點(diǎn)围肥。節(jié)點(diǎn)是通過(guò)沿著路徑或者 step 來(lái)選取的。 下面列出了最有用的路徑表達(dá)式:

表達(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)。
@ 選取屬性评矩。

例子

以下面這個(gè)xml為例子

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>

在下面的表格中叶堆,我們已列出了一些路徑表達(dá)式以及表達(dá)式的結(jié)果:

路徑表達(dá)式 結(jié)果
bookstore 選取 bookstore 元素的所有子節(jié)點(diǎn)。
/bookstore 選取根元素 bookstore斥杜。注釋?zhuān)杭偃缏窂狡鹗加谡备? / )虱颗,則此路徑始終代表到某元素的絕對(duì)路徑!
bookstore/book 選取屬于 bookstore 的子元素的所有 book 元素蔗喂。
//book 選取所有 book 子元素忘渔,而不管它們?cè)谖臋n中的位置。
bookstore//book 選擇屬于 bookstore 元素的后代的所有 book 元素弱恒,而不管它們位于 bookstore 之下的什么位置辨萍。
//@lang 選取名為 lang 的所有屬性。

謂語(yǔ)

謂語(yǔ)用來(lái)查找某個(gè)特定的節(jié)點(diǎn)或者包含某個(gè)指定的值的節(jié)點(diǎn)。
謂語(yǔ)被嵌在方括號(hào)中锈玉。
在下面的表格中爪飘,我們列出了帶有謂語(yǔ)的一些路徑表達(dá)式,以及表達(dá)式的結(jié)果:

路徑表達(dá)式 結(jié)果
/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ù)碛兄禐?eng 的 lang 屬性两疚。
/bookstore/book[price>35.00] 選取 bookstore 元素的所有 book 元素床估,且其中的 price 元素的值須大于 35.00。
/bookstore/book[price>35.00]/title 選取 bookstore 元素中的 book 元素的所有 title 元素诱渤,且其中的 price 元素的值須大于 35.00丐巫。

選取未知節(jié)點(diǎn)

XPath 通配符可用來(lái)選取未知的 XML 元素。

通配符 描述
* 匹配任何元素節(jié)點(diǎn)勺美。
@* 匹配任何屬性節(jié)點(diǎn)递胧。
node() 匹配任何類(lèi)型的節(jié)點(diǎn)。

例子:

路徑表達(dá)式 結(jié)果
/bookstore/* 選取 bookstore 元素的所有子元素赡茸。
//* 選取文檔中的所有元素缎脾。
//title[@*] 選取所有帶有屬性的 title 元素。

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

  • //book/title | //book/price 選取 book 元素的所有 title 和 price 元素。
  • //title | //price 選取文檔中的所有 title 和 price 元素屉栓。
  • /bookstore/book/title | //price 選取屬于 bookstore 元素的 book 元素的所有 title 元素舷蒲,以及文檔中所有的 price 元素耸袜。

三友多、軸

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

軸名稱(chēng) 結(jié)果
ancestor 選取當(dāng)前節(jié)點(diǎn)的所有先輩(父堤框、祖父等)域滥。
ancestor-or-self 選取當(dāng)前節(jié)點(diǎn)的所有先輩(父、祖父等)以及當(dāng)前節(jié)點(diǎn)本身蜈抓。
attribute 選取當(dāng)前節(jié)點(diǎn)的所有屬性启绰。
child 選取當(dāng)前節(jié)點(diǎn)的所有子元素。
descendant 選取當(dāng)前節(jié)點(diǎn)的所有后代元素(子沟使、孫等)委可。
descendant-or-self 選取當(dāng)前節(jié)點(diǎn)的所有后代元素(子、孫等)以及當(dāng)前節(jié)點(diǎn)本身。
following 選取文檔中當(dāng)前節(jié)點(diǎn)的結(jié)束標(biāo)簽之后的所有節(jié)點(diǎn)着倾。
namespace 選取當(dāng)前節(jié)點(diǎn)的所有命名空間節(jié)點(diǎn)拾酝。
parent 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)。
preceding 選取文檔中當(dāng)前節(jié)點(diǎn)的開(kāi)始標(biāo)簽之前的所有節(jié)點(diǎn)卡者。
preceding-sibling 選取當(dāng)前節(jié)點(diǎn)之前的所有同級(jí)節(jié)點(diǎn)蒿囤。
self 選取當(dāng)前節(jié)點(diǎn)。

步的語(yǔ)法:
軸名稱(chēng)::節(jié)點(diǎn)測(cè)試[謂語(yǔ)]

例子:

例子 結(jié)果
child::book 選取所有屬于當(dāng)前節(jié)點(diǎn)的子元素的 book 節(jié)點(diǎn)崇决。
attribute::lang 選取當(dāng)前節(jié)點(diǎn)的 lang 屬性材诽。
child::* 選取當(dāng)前節(jié)點(diǎn)的所有子元素。
attribute::* 選取當(dāng)前節(jié)點(diǎn)的所有屬性恒傻。
child::text() 選取當(dāng)前節(jié)點(diǎn)的所有文本子節(jié)點(diǎn)脸侥。
child::node() 選取當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn)。
descendant::book 選取當(dāng)前節(jié)點(diǎn)的所有 book 后代盈厘。
ancestor::book 選擇當(dāng)前節(jié)點(diǎn)的所有 book 先輩湿痢。
ancestor-or-self::book 選取當(dāng)前節(jié)點(diǎn)的所有 book 先輩以及當(dāng)前節(jié)點(diǎn)(如果此節(jié)點(diǎn)是 book 節(jié)點(diǎn))
child::*/child::price 選取當(dāng)前節(jié)點(diǎn)的所有 price 孫節(jié)點(diǎn)。

四扑庞、一些函數(shù)

1. starts-with函數(shù)

獲取以xxx開(kāi)頭的元素
例子:xpath(‘//div[stars-with(@class,”test”)]’)

2 contains函數(shù)

獲取包含xxx的元素
例子:xpath(‘//div[contains(@id,”test”)]’)

3 and

與的關(guān)系
例子:xpath(‘//div[contains(@id,”test”) and contains(@id,”title”)]’)

4 text()函數(shù)

例子1:xpath(‘//div[contains(text(),”test”)]’)
例子2:xpath(‘//div[@id=”“test]/text()’)

五譬重、一個(gè)lxml的xpath示例

# _*_ encoding =utf-8 _*_
from scrapy.selector import Selector
from scrapy.http import HtmlResponse
body ='''
<html>
 <head>
  <base  />
  <title>Example website</title>
 </head>
 <body>
 <p>test</p>
 <span>good</span>
  <div id='images'>
   <a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
   <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
   <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
   <a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
   <a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
  </div>
  <div class="text1">
  <span class="righttext">
  <a >3939483</a>
  </span>
  <p><a  target="_blank" class="view_img_link">[查看原圖]</a><br>
  <img src="http://wx4.sinaimg.cn/mw600/0076BSS5ly1fukuydd6q8j30k00zkjvw.jpg" style="max-width: 480px; max-height: 750px;"></p>
 </div>
 <div class="text2">
 <span class="righttext">
 <a >3939362</a></span>
 <p><a  target="_blank" class="view_img_link">[查看原圖]</a><br>
 <img src="http://wx1.sinaimg.cn/mw600/5d70f687ly1fuio0bjk9aj20mk0s71kx.jpg" style="max-width: 480px; max-height: 750px;"></p>
</div>
<div class="text3">
<span class="righttext">
<a >3939288</a></span>
<p><a  target="_blank" class="view_img_link">[查看原圖]</a><br>
<img src="http://ww3.sinaimg.cn/mw600/006XNEY7gy1fukqal7th2j30p00p0jtd.jpg" style="max-width: 480px; max-height: 750px;"></p>
</div>
 </body>
</html>
'''
#Scrapy selector是以 文字(text) 或 TextResponse 構(gòu)造的 Selector 實(shí)例。
#其根據(jù)輸入的類(lèi)型自動(dòng)選擇最優(yōu)的分析方法(XML vs HTML):
spantest =Selector(text=body).xpath('//span/text()').extract()
print(spantest)

#response對(duì)象以 .selector 屬性提供了一個(gè)selector罐氨, 您可以隨時(shí)使用該快捷方法:

response = HtmlResponse(url='http://www.baidu.com', body=body,encoding='UTF-8')
ptest =Selector(response=response).xpath('//p/text()').extract()
print(ptest)

#構(gòu)建一個(gè)XPath來(lái)選擇title標(biāo)簽內(nèi)的文字:
title =Selector(text=body).xpath('//title/text()').extract()
print(title)

#由于在response中使用XPath臀规、CSS查詢(xún)十分普遍,
#因此栅隐,Scrapy提供了兩個(gè)實(shí)用的快捷方式: response.xpath() 及 response.css():
csstest =response.css('title::text').extract()
print(csstest)
#現(xiàn)在我們將得到根URL(base URL)和一些圖片鏈接:
basehref =response.xpath('//base/@href').extract()
print(basehref)
basehref2=response.css('base::attr(href)').extract()
print(basehref2)
imagehref =response.xpath('//a[contains(@href, "image")]/@href').extract()
print(imagehref)
imagehref2 =response.css('a[href*=image]::attr(href)').extract()
print(imagehref2)
imagesrc =response.xpath('//a[contains(@href, "image")]/img/@src').extract()
print(imagesrc)
imagesrc2 =response.css('a[href*=image] img::attr(src)').extract()
print(imagesrc2)
#選擇器方法( .xpath() or .css() )返回相同類(lèi)型的選擇器列表塔嬉,因此你也可以對(duì)這些選擇器調(diào)用選擇器方法。
links = response.xpath('//a[contains(@href, "image")]')
print(links.extract())
for index, link in enumerate(links):
        args = (index, link.xpath('@href').extract(), link.xpath('img/@src').extract())
        print('Link number %d points to url %s and image %s' % args)

#結(jié)合正則表達(dá)式使用選擇器(selectors)
#Selector 也有一個(gè) .re() 方法租悄,用來(lái)通過(guò)正則表達(dá)式來(lái)提取數(shù)據(jù)谨究。
#然而,不同于使用 .xpath() 或者 .css() 方法, .re() 方法返回unicode字符串的列表泣棋。所以你無(wú)法構(gòu)造嵌套式的 .re() 調(diào)用胶哲。
re =response.xpath('//a[contains(@href, "image")]/text()').re(r'Name:\s*(.*)')
print(re)
print('==================================')
#使用相對(duì)XPaths
#記住如果你使用嵌套的選擇器,并使用起始為 / 的XPath潭辈,
#那么該XPath將對(duì)文檔使用絕對(duì)路徑鸯屿,而且對(duì)于你調(diào)用的 Selector 不是相對(duì)路徑。
divs = response.xpath('//div')
for p in divs.xpath('.//p'):  # 注意 .//p XPath的點(diǎn)前綴
    print(p.extract())
print('==================================')
#另一種常見(jiàn)的情況將是提取所有直系 <p> 的結(jié)果
for p in divs.xpath('p'):
    print(p.extract())
print('==================================')
#指定div的class選取圖片
imagesrc =response.xpath('//div[contains(@class,"text1")]/p/img/@src').extract()
print(imagesrc)

運(yùn)行結(jié)果:


運(yùn)行結(jié)果

六把敢、常用表達(dá)式列表

常用表達(dá)式實(shí)例:

表達(dá)式 說(shuō)明
/ Document Root文檔根.
/* 選擇文檔根下面的所有元素節(jié)點(diǎn)寄摆,即根節(jié)點(diǎn)(XML文檔只有一個(gè)根節(jié)點(diǎn))
/node() 根元素下所有的節(jié)點(diǎn)(包括文本節(jié)點(diǎn),注釋節(jié)點(diǎn)等)
/text() 查找文檔根節(jié)點(diǎn)下的所有文本節(jié)點(diǎn)
/messages/message messages節(jié)點(diǎn)下的所有message節(jié)點(diǎn)
/messages/message[1] messages節(jié)點(diǎn)下的第一個(gè)message節(jié)點(diǎn)
/messages/message[1]/self::node() 第一個(gè)message節(jié)點(diǎn)(self軸表示自身修赞,node()表示選擇所有節(jié)點(diǎn))
/messages/message[1]/node() 第一個(gè)message節(jié)點(diǎn)下的所有子節(jié)點(diǎn)
/messages/message[1]/*[last()] 第一個(gè)message節(jié)點(diǎn)的最后一個(gè)子節(jié)點(diǎn)
/messages/message[1]/[last()] Error婶恼,謂詞前必須是節(jié)點(diǎn)或節(jié)點(diǎn)集
/messages/message[1]/node()[last()] 第一個(gè)message節(jié)點(diǎn)的最后一個(gè)子節(jié)點(diǎn)
/messages/message[1]/text() 第一個(gè)message節(jié)點(diǎn)的所有子節(jié)點(diǎn)
/messages/message[1]//text() 第一個(gè)message節(jié)點(diǎn)下遞歸下降查找所有的文本節(jié)點(diǎn)(無(wú)限深度)
/messages/message[1] /child::node() /messages/message[1] /node() /messages/message[position()=1] /node()//message[@id=1] /node() 第一個(gè)message節(jié)點(diǎn)下的所有子節(jié)點(diǎn)
//message[@id=1] //child::node() 遞歸所有子節(jié)點(diǎn)(無(wú)限深度)
//message[position()=1]/node() 選擇id=1的message節(jié)點(diǎn)以及id=0的message節(jié)點(diǎn)
/messages/message[1] /parent::* Messages節(jié)點(diǎn)
/messages/message[1]/body/attachments/parent::node()
/messages/message[1]/body/attachments/parent::* /messages/message[1]/body/attachments/.. attachments節(jié)點(diǎn)的父節(jié)點(diǎn)。父節(jié)點(diǎn)只有一個(gè),所以node()和* 返回結(jié)果一樣(..也表示父節(jié)點(diǎn). 表示自身節(jié)點(diǎn))
//message[@id=0]/ancestor::* Ancestor軸表示所有的祖輩,父勾邦,祖父等联逻。向上遞歸
//message[@id=0]/ancestor-or-self::* 向上遞歸,包含自身
//message[@id=0]/ancestor::node() 對(duì)比使用*,多一個(gè)文檔根元素(Document root)
/messages/message[1]/descendant::node()//messages/message[1]//node() 遞歸下降查找message節(jié)點(diǎn)的所有節(jié)點(diǎn)
/messages/message[1]/sender/following::* 查找第一個(gè)message節(jié)點(diǎn)的sender節(jié)點(diǎn)后的所有同級(jí)節(jié)點(diǎn),并對(duì)每一個(gè)同級(jí)節(jié)點(diǎn)遞歸向下查找检痰。
//message[@id=1]/sender/following-sibling::* 查找id=1的message節(jié)點(diǎn)的sender節(jié)點(diǎn)的所有后續(xù)的同級(jí)節(jié)點(diǎn)包归。
//message[@id=1]/datetime/@date 查找id=1的message節(jié)點(diǎn)的datetime節(jié)點(diǎn)的date屬性
//message[@id=1]/datetime[@date] //message/datetime[attribute::date] 查找id=1的message節(jié)點(diǎn)的所有含有date屬性的datetime節(jié)點(diǎn)
//message[datetime] 查找所有含有datetime節(jié)點(diǎn)的message節(jié)點(diǎn)
//message/datetime/attribute::* //message/datetime/attribute::node()
//message/datetime/@* 返回message節(jié)點(diǎn)下datetime節(jié)點(diǎn)的所有屬性節(jié)點(diǎn)
//message/datetime[attribute::*] //message/datetime[attribute::node()]
//message/datetime[@*] //message/datetime[@node()] 選擇所有含有屬性的datetime節(jié)點(diǎn)
//attribute::* 選擇根節(jié)點(diǎn)下的所有屬性節(jié)點(diǎn)
//message[@id=0]/body/preceding::node() 順序選擇body節(jié)點(diǎn)所在節(jié)點(diǎn)前的所有同級(jí)節(jié)點(diǎn)。(查找順序?yàn)椋合日业絙ody節(jié)點(diǎn)的頂級(jí)節(jié)點(diǎn)(根節(jié)點(diǎn)),得到根節(jié)點(diǎn)標(biāo)簽前的所有同級(jí)節(jié)點(diǎn)铅歼,執(zhí)行完成后繼續(xù)向下一級(jí)公壤,順序得到該節(jié)點(diǎn)標(biāo)簽前的所有同級(jí)節(jié)點(diǎn),依次類(lèi)推椎椰。)注意:查找同級(jí)節(jié)點(diǎn)是順序查找厦幅,而不是遞歸查找。
//message[@id=0]/body/preceding-sibling::node() 順序查找body標(biāo)簽前的所有同級(jí)節(jié)點(diǎn)慨飘。(和上例一個(gè)最大的區(qū)別是:不從最頂層開(kāi)始到body節(jié)點(diǎn)逐層查找确憨。我們可以理解成少了一個(gè)循環(huán),而只查找當(dāng)前節(jié)點(diǎn)前的同級(jí)節(jié)點(diǎn))
//message[@id=1]//*[namespace::amazon] 查找id=1的所有message節(jié)點(diǎn)下的所有命名空間為amazon的節(jié)點(diǎn)瓤的。
//namespace::* 文檔中的所有的命名空間節(jié)點(diǎn)休弃。(包括默認(rèn)命名空間xmlns:xml)
//message[@id=0]//books/*[local-name()='book'] 選擇books下的所有的book節(jié)點(diǎn),注意:由于book節(jié)點(diǎn)定義了命名空間<amazone:book>.若寫(xiě)成//message[@id=0]//books/book則查找不出任何節(jié)點(diǎn)圈膏。
//message[@id=0]//books/*[local-name()='book' and namespace-uri()='http://www.amazon.com/books/schema'] 選擇books下的所有的book節(jié)點(diǎn)塔猾,(節(jié)點(diǎn)名和命名空間都匹配)
//message[@id=0]//books/*[local-name()='book'][year>2006] 選擇year節(jié)點(diǎn)值>2006的book節(jié)點(diǎn)
//message[@id=0]//books/*[local-name()='book'][1]/year>2006 指示第一個(gè)book節(jié)點(diǎn)的year節(jié)點(diǎn)值是否大于2006.返回xs:boolean: true

內(nèi)容參考:http://www.runoob.com/xpath/xpath-tutorial.html
參考:https://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/selectors.html#topics-selectors

也可以學(xué)習(xí)下簡(jiǎn)書(shū)其他作者的文章:http://www.reibang.com/p/1575db75670f

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市稽坤,隨后出現(xiàn)的幾起案子丈甸,更是在濱河造成了極大的恐慌,老刑警劉巖尿褪,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睦擂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡杖玲,警方通過(guò)查閱死者的電腦和手機(jī)顿仇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)天揖,“玉大人夺欲,你說(shuō)我怎么就攤上這事跪帝〗癫玻” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵伞剑,是天一觀的道長(zhǎng)斑唬。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么恕刘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任缤谎,我火速辦了婚禮,結(jié)果婚禮上褐着,老公的妹妹穿的比我還像新娘坷澡。我一直安慰自己,他們只是感情好含蓉,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布频敛。 她就那樣靜靜地躺著,像睡著了一般馅扣。 火紅的嫁衣襯著肌膚如雪斟赚。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,785評(píng)論 1 314
  • 那天差油,我揣著相機(jī)與錄音拗军,去河邊找鬼。 笑死蓄喇,一個(gè)胖子當(dāng)著我的面吹牛发侵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妆偏,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼器紧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了楼眷?” 一聲冷哼從身側(cè)響起铲汪,我...
    開(kāi)封第一講書(shū)人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎罐柳,沒(méi)想到半個(gè)月后掌腰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡张吉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年齿梁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肮蛹。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡勺择,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伦忠,到底是詐尸還是另有隱情省核,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布昆码,位于F島的核電站气忠,受9級(jí)特大地震影響邻储,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旧噪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一吨娜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧淘钟,春花似錦宦赠、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至爱咬,卻和暖如春尺借,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背精拟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工燎斩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蜂绎。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓栅表,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親师枣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子怪瓶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 教練背景: 老婆是3號(hào),最近比較忙践美,我沒(méi)有固定時(shí)間上班洗贰,主要是照顧兩個(gè)小孩,同時(shí)處理一些工作上的事情陨倡,今天她晚上又...
    Mike回到自己閱讀 174評(píng)論 0 5
  • 花開(kāi)的地方在夢(mèng)里 我走在現(xiàn)實(shí)的路上 原來(lái)入睡便可以看到你綻放 當(dāng)我入睡時(shí) 做的還是那個(gè)開(kāi)著花朵的夢(mèng)嗎 還是荒蕪的夢(mèng)...
    江舟泊客閱讀 367評(píng)論 0 3
  • 那就關(guān)注我微信公眾號(hào) 超越神的套路 這只是一個(gè)路口
    易奶爸閱讀 245評(píng)論 0 0
  • 昨天兒子看了我寫(xiě)的日記以后敛滋,說(shuō)我有點(diǎn)毀壞他的形象。今天早上主動(dòng)要求將跑步的強(qiáng)度加大兴革,知恥而后勇绎晃,希望不是三天...
    復(fù)興合劉閱讀 1,023評(píng)論 0 0