背景
最近在做UI自動化, UI自動化的元素定位繞不開XPath, 抽空學習了XPath相關知識, 這裡做下學習筆記.
XPath簡介
XPath, 全稱 XML Path Language, 即XML路徑語言, 是一門在XML文件中查詢資訊的語言.
XPath是使用路徑表示式來選去XML文件中的節點或者節點集. 節點是通過沿著路徑(path)或者步(steps)來選取的.
XPath語法
路徑表示式:
表示式 | 描述 |
---|---|
nodename | 選取此節點的所有子節點 |
/ | 從當前節點選取直接子節點 |
// | 從匹配選擇的當前節點選擇所有子孫節點 |
. | 選取當前節點 |
.. | 選取當前節點的父節點 |
@ | 選取屬性 |
謂語(Predicates)
謂語用來查詢某個特定的節點或者包含某個指定的值的節點.
謂語被嵌在方括號中
謂語 | 描述 |
---|---|
n | 第n個元素 |
last() | 最後一個元素 |
last()-n | 倒數第n+1個元素 |
position()<n | 選取前n-1個元素 |
@XXX | 可以巢狀表示式 |
選取未知節點
XPath萬用字元可以用於選取未知的XML元素.
萬用字元 | 描述 |
---|---|
* | 匹配任何元素節點 |
@* | 匹配任何屬性節點 |
node() | 匹配任何型別的節點 |
選取若干路徑
通過在路徑表示式中使用“|”, 可以選取若干個路徑.
eg:
路徑表示式 | 結果 |
---|---|
//* | 匹配文件中的所有元素 |
//title[@*] | 匹配所有帶有屬性的title元素 |
//title | //price |
/bookstore/book[price>35.00] | 選取 bookstore 元素的所有 book 元素,且其中的 price 元素的值須大於 35.00。 |
XPath標準函式
XPath包含有超過100個內建函式. 這些函式用於字串值、數值、日期和時間比較、節點和QName處理、序列處理、邏輯值等.
函式 | 描述 |
---|---|
contains(@AA, “XXX”) | 屬性AA是否包含XXX的元素 |
starts-with(string1,string2) | 如果 string1 以 string2 開始,則返回 true,否則返回 false。 |
ends-with(string1,string2) | 如果 string1 以 string2 結尾,則返回 true,否則返回 false。 |
matches(string,pattern) | 如果 string 引數匹配指定的模式,則返回 true,否則返回 false。 |
其他關鍵資訊
1.支援的運算子
and、or、mod、+、-、*、div、=、!=、<、<=、>、>=
2.XPath Axes(軸)
- 軸可定義相對於當前節點的節點集.
- 語法: 軸::節點選擇器
錨點 | 描述 |
---|---|
ancestor::節點選擇器 | 選取當前節點的所有先輩(父、祖父等)。 |
ancestor-or-self | 選取當前節點的所有先輩(父、祖父等)以及當前節點本身。 |
attribute::節點選擇器 | 選取當前節點的所有屬性值 |
child | 選取當前節點的所有直接子元素 |
descendant | 獲取當前節點的所有後代元素(子、孫等) |
following | 獲取當前節點的結束標籤之後的所有節點 |
following-sibling | 可以獲取當前節點之後的所有同級節點 |
namespace | 選取當前節點的所有名稱空間節點。 |
preceding | 選取文件中當前節點的開始標籤之前的所有節點。 |
self | 選取當前節點 |