XPath學習筆記

AmyZYX發表於2019-01-05

背景

最近在做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 選取當前節點