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