XPath初探笔记
XPath初探筆記
- 背景
- XPath功能
- 通配節(jié)點選擇
- 條件選擇
- 常用函數(shù)選擇
- 多個XPath組合
- 相對關(guān)系軸(節(jié)點集)
- 數(shù)值運算
- 參考
背景
原先基本沒咋接觸前端,最近在搞Scrapy的時候順手把XPath讀了讀,順便做了點筆記。
XPath使用了路徑表示法,就像在url中導(dǎo)航XML文檔的層次結(jié)構(gòu)一樣。
本身XPath也并不復(fù)雜,了解下面的部分放在Scrapy中已經(jīng)完全夠用了。
XPath功能
XPath標(biāo)記分為幾類基礎(chǔ)功能,依次簡單看看:
通配節(jié)點選擇
- 絕對尋址
如果路徑始于/,就意味著將從根節(jié)點開始使用絕對路徑進(jìn)行尋址。
/AAA
/AAA/CCC
/AAA/DDD/BBB
- 節(jié)點搜索
如果路徑以//開頭,則將選擇文檔中滿足條件的所有元素。
//BBB
//DDD/BBB
- 全節(jié)點選擇
*選擇處理路徑下的所有元素
/AAA/CCC/DDD/*
條件選擇
- 數(shù)組選擇
/AAA/BBB[1]
/AAA/BBB[last()]
- 屬性選擇
@用以指定屬性
//@id
//BBB[@id]
//BBB[@*]
//BBB[not(@*)]
- 屬性值選擇
可以指定屬性值進(jìn)行選擇。normailize-space可以將前導(dǎo)后導(dǎo)空格去除。
//BBB[@id=‘b1’]
//BBB[normalize-space(@name)=‘bbb’]
去除屬性值的前后導(dǎo)空格
常用函數(shù)選擇
- 節(jié)點計數(shù)選擇
count()函數(shù)可以計算選中元素的子元素的數(shù)量
//*[count(BBB)=2]
選擇擁有2個BBB子元素的元素
//[count()=3]
選擇擁有3個子元素的元素
- 元素名
name():返回元素名
//*[name()=‘BBB’]
- 字符串操作
starts-with(A1,B1): 判定A1是否以B1為始
//*[starts-with(name(),‘B’)]
contains(A1,B1): 判定A1中是否包含B1
//*[contains(name(),‘C’)]
string-length():返回字符串長度
//*[string-length(name()) < 3]
多個XPath組合
可以由|組合多個XPath
/AAA/EEE | //BBB
/AAA/EEE | //DDD/CCC | /AAA | //BBB
相對關(guān)系軸(節(jié)點集)
- 子軸child axis
/child::AAA = /AAA
/child::AAA/child::BBB = /child::AAA/BBB = /AAA/child::BBB = /AAA/BBB
- 后裔軸Descendant axis | Descendant-or-self axis
*Descendant-or-self 在上述的基礎(chǔ)上增加本節(jié)點
/descendant:😗
根節(jié)點的所有后裔節(jié)點,即全節(jié)點
/AAA/BBB/descendant:😗
/AAA/BBB節(jié)點的所有后裔節(jié)點,不含節(jié)點/AAA/BBB
//CCC/descendant::DDD
選擇所有DDD節(jié)點,該DDD節(jié)點應(yīng)為某CCC節(jié)點的后裔
/AAA/XXX/descendant-or-self:😗
/AAA/XXX的節(jié)點及其所有后裔節(jié)點
- 父軸Parent axis
//DDD/parent:😗
DDD節(jié)點的父節(jié)點
- 祖先軸Ancestor axisAncestor | Ancestor-or-self axis
*Ancestor-or-self 在上述的基礎(chǔ)上增加本節(jié)點,必定包含根節(jié)點
//FFF/ancestor:😗
所有FFF節(jié)點的祖先節(jié)點
- 弟妹軸Following-sibling axis
//CCC/following-sibling:😗
選擇所有CCC節(jié)點的弟弟
- 兄姐軸Preceding-sibling axis
/AAA/XXX/preceding-sibling:😗
選擇/AAA/XXX節(jié)點的哥哥
- 后繼軸 Following axis
//ZZZ/following:😗
所有ZZZ節(jié)點的后繼節(jié)點
-先導(dǎo)軸 Preceding axis
/AAA/XXX/preceding:😗
所有/AAA/XXX節(jié)點的先導(dǎo)節(jié)點
- 軸的正交性 Orthogonal axes
ancestor, descendant, following, preceding and self(child)軸可以將XPath文檔劃分為正交的幾部分,他們相互不重疊,疊加后可構(gòu)成完整的文檔。
//GGG/ancestor::* | //GGG/descendant::* | //GGG/following::* | //GGG/preceding::* | //GGG/self::* = //*
數(shù)值運算
除了加減外,支持以下操作符(其實應(yīng)該屬于一看就懂的):
- div:執(zhí)行浮點除法
- mod:操作符返回截斷除法的余數(shù)
- floor:向下取整
- ceiling:向上取整
參考
總結(jié)
- 上一篇: Scrapy中的yield使用
- 下一篇: Scrum基础知识体系和感想