簡介
XPath即為XML路徑語言(XML Path Language),它是一種用來确定XML文檔中某部分位置的語言。
XPath基于XML的樹狀結構,提供在資料結構樹中找尋節點的能力。起初XPath的提出的初衷是将其作為一個通用的、介于XPointer與XSL間的文法模型。但是XPath很快地被開發者采用來當作小型查詢語言。
文法
選取節點 XPath 使用路徑表達式在 XML 文檔中選取節點。節點是通過沿着路徑或者 step 來選取的。
下面列出了最有用的路徑表達式:
在下面的表格中,我們已列出了一些路徑表達式以及表達式的結果:
謂語(Predicates)
謂語用來查找某個特定的節點或者包含某個指定的值的節點。謂語被嵌在方括号中。
執行個體:
在下面的表格中,我們列出了帶有謂語的一些路徑表達式,以及表達式的結果:
選取未知節點
XPath 通配符可用來選取未知的 XML 元素。
執行個體:
在下面的表格中,我們列出了一些路徑表達式,以及這些表達式的結果:
選取若幹路徑
通過在路徑表達式中使用“|”運算符,您可以選取若幹個路徑。
執行個體:
在下面的表格中,我們列出了一些路徑表達式,以及這些表達式的結果:
表達式
XPath 使用路徑表達式來選取 XML 文檔中的節點或者節點集。這些路徑表達式和我們在正常的電腦檔案系統中看到的表達式非常相似。路徑表達式是從一個XML節點(目前的上下文節點)到另一個節點、或一組節點的書面步驟順序。
這些步驟以“/”字元分開,每一步有三個構成成分:
軸描述(用最直接的方式接近目标節點)
節點測試(用于篩選節點位置和名稱)
節點描述(用于篩選節點的屬性和子節點特征)
一般情況下,我們使用簡寫後的文法。雖然完整的軸描述是一種更加貼近人類語言,利用自然語言的單詞和文法來書寫的描述方式,但是相比之下也更加啰嗦。
運算符
下面列出了可用在 XPath 表達式中的運算符:
标準函數
XPath 含有超過 100 個内建的函數。這些函數用于字元串值、數值,日期和時間比較、節點和 QName 處理、序列處理、邏輯值等等。
使用:
XPath 是 XSLT 标準中的主要元素。如果沒有 XPath 方面的知識,您就無法建立 XSLT 文檔。
XQuery 和 XPointer 均建構于 XPath 表達式之上。XQuery 1.0 和 XPath 2.0 共享相同的資料模型,并支援相同的函數和運算符。
标準:
XPath 于 1999年11月16日 成為 W3C 标準。
XPath 被設計供 XSLT、XPointer 以及其他 XML 解析軟體使用。
軸定義
軸可定義相對于目前節點的節點集。(以目前節點為軸心)
位置路徑表達式
位置路徑可以是絕對的,也可以是相對的。
絕對路徑起始于正斜杠( / ),而相對路徑不會這樣。在兩種情況中,位置路徑均包括一個或多個步,每個步均被斜杠分割:
絕對位置路徑:/step/step/…
相對位置路徑:step/step/…
每個步均根據目前節點集之中的節點來進行計算
每個步均根據目前節點集之中的節點來進行計算
步(step)包括:
軸(axis)
定義所選節點與目前節點之間的樹關系
節點測試(node-test)
識别某個軸内部的節點
零個或者更多謂語(predicate)
更深入地提煉所選的節點集
步的文法:軸名稱::節點測試[謂語]
執行個體:
節點關系
節點(Node)是XPath 的術語。
在 XPath 中,有七種類型的節點:元素、屬性、文本、命名空間、處理指令、注釋以及文檔(根)節點。XML 文檔是被作為節點樹來對待的。樹的根被稱為文檔節點或者根節點。
父(Parent)
每個元素以及屬性都有一個父。
在下面的例子中,book 元素是 title、author、year 以及 price 元素的父:
<book>
<title>HarryPotter</title>
<author>JK.Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
子(Children)
元素節點可有零個、一個或多個子。
在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:
<book>
<title>HarryPotter</title>
<author>JK.Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
同胞(Sibling)(兄弟)
擁有相同的父的節點
在下面的例子中,title、author、year 以及 price 元素都是同胞:
<book>
<title>HarryPotter</title>
<author>JK.Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
先輩(Ancestor)
某節點的父、父的父,等等。
在下面的例子中,title 元素的先輩是 book 元素和 bookstore 元素:
<bookstore>
<book>
<title>HarryPotter</title>
<author>JK.Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
存取函數
fn:node-name(node) 傳回參數節點的節點名稱。
fn:nilled(node) 傳回是否拒絕參數節點的布爾值。
fn:data(item.item,…) 接受項目序列,并傳回原子值序列。
fn:base-uri()
fn:base-uri(node)
傳回目前節點或指定節點的 base-uri 屬性的值。
fn:document-uri(node)
傳回指定節點的 document-uri 屬性的值。
語言更新
在 W3C 建議下,XPath 1.0于 1999年 11月16日 發表。XPath 2.0 正在W3C稽核過程的最終階段。XPath 2.0表達了XPath語言在大小與能力上顯著的增加。
最值得一提的改變是XPath 2.0有了更豐富的型别系統;XPath 2.0支援不可分割型态,如在 XML Schema 内建型态定義一樣,并且也可自綱要(schema)導入使用者自定型别。每個值都是一個序列(一個單一不可分割值或節點都被視為長度一的序列)。XPath 1.0節點組被節點序列取代,它可以是任何順序。
為了支援更豐富的型别組,XPath 2.0提供相當延展的函式與操作子群。
XPath 2.0實際上是 XQuery 1.0 的子集合。它提供了一個for表達式。該式是XQuery裡“FLWOR”表達式的縮減版。利用列出XQuery省去的部分來描述該語言是可能的。主要範例是查詢前導語(query prolog)、元素和屬性建構式、“FLWOR”文法的餘項式、以及typeswitch表達式。
執行個體
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book category="COOKING">
<title >Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title >Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title >XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year> <price>49.99</price>
</book>
<book category="WEB">
<title >Learning XML</title>
<author>Erik T. Ray</author> <year>2003</year>
<price>39.95</price>
</book>
</bookstore>
最後: 可以在公衆号:傷心的辣條 ! 自行領取一份216頁軟體測試工程師面試寶典文檔資料【免費的】。以及相對應的視訊學習教程免費分享!,其中包括了有基礎知識、Linux必備、Shell、網際網路程式原理、Mysql資料庫、抓包工具專題、接口測試工具、測試進階-Python程式設計、Web自動化測試、APP自動化測試、接口自動化測試、測試進階持續內建、測試架構開發測試架構、性能測試、安全測試等。
學習不要孤軍奮戰,最好是能抱團取暖,互相成就一起成長,群衆效應的效果是非常強大的,大家一起學習,一起打卡,會更有學習動力,也更能堅持下去。你可以加入我們的測試技術交流扣扣群:914172719(裡面有各種軟體測試資源和技術讨論)
喜歡軟體測試的小夥伴們,如果我的部落格對你有幫助、如果你喜歡我的部落格内容,請 “點贊” “評論” “收藏” 一鍵三連哦!