XPath(XML Path Language)是XSLT標準的主要組成部分。它用於在XML文件中瀏覽元素和屬性,提供了一種強大的定位和選擇節點的方式。
XPath的基本特點
-
代表XML路徑語言: XPath是一種用於在XML文件中導航和選擇節點的語言。
-
路徑樣式語法: XPath使用路徑表示式的“路徑樣式”語法來標識和導航XML文件中的節點。
-
包含200多個內建函式: XPath包含200多個內建函式,可用於處理字串、數值、布林值、日期和時間等。
-
XSLT的主要組成部分: XPath是XSLT(可擴充套件樣式表語言轉換)標準的主要組成部分,用於在XML文件中選擇和運算元據
XPath路徑表示式
XPath使用路徑表示式來選擇XML文件中的節點或節點集。這些路徑表示式類似於在傳統計算機檔案系統中使用的路徑表示式。
例如,/bookstore/book/title
是一個XPath路徑表示式,表示選擇根元素是bookstore
的子元素book
的子元素title
。
XPath標準函式
XPath包括200多個內建函式,用於處理不同型別的資料。這些函式涵蓋了字串值、數值、布林值、日期和時間比較、節點操作、序列操作等。
XPath表示式也可以在多種程式語言中使用,如JavaScript、Java、XML Schema、PHP、Python、C和C++等。
XPath用於XSLT
XPath是XSLT標準的主要組成部分,它與XSLT一起用於對XML文件進行轉換和樣式處理。具有XPath知識可以充分發揮XSLT的強大功能
XPath節點
在XPath中,有七種節點:元素、屬性、文字、名稱空間、處理指令、註釋和根節點。XML文件被視為節點樹,樹的最頂層元素稱為根元素。
XPath術語
-
節點(Node): 在XPath中,有七種節點,包括元素、屬性、文字、名稱空間、處理指令、註釋和根節點。XML文件被視為節點樹,樹的最頂層元素稱為根元素。
-
原子值(Atomic Value): 原子值是沒有子節點或父節點的節點。例如,字串或數字。
-
專案(Item): 專案可以是原子值或節點。
節點之間的關係
在XPath中,節點之間有不同的關係:
-
父節點(Parent Node): 每個元素和屬性都有一個父節點。
-
子節點(Child Node): 元素節點可以有零、一個或多個子節點。
-
同級節點(Sibling Node): 具有相同父節點的節點。
-
祖先節點(Ancestor Node): 節點的父節點、父節點的父節點等。
-
後代節點(Descendant Node): 節點的子節點、子節點的子節點等。
XPath語法
XPath使用路徑表示式在XML文件中選擇節點。以下是一些常用的XPath路徑表示式:
nodename
:選擇所有名稱為 "nodename" 的節點。/
:從根節點選擇。//
:選擇文件中與選擇匹配的當前節點的位置無關的節點。.
:選擇當前節點。..
:選擇當前節點的父節點。@
:選擇屬性。
XPath示例文件
以下是我們將在下面的示例中使用的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<title lang="en">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="en">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
選擇節點示例
以下是一些XPath路徑表示式的示例及其結果:
/bookstore
:選擇所有名稱為 "bookstore" 的節點。/bookstore/book
:選擇根元素bookstore
的子元素book
。//title[@lang='en']
:選擇所有具有值為 "en" 的 "lang" 屬性的title
元素。
選擇未知節點
XPath萬用字元可用於選擇未知的XML節點:
*
:匹配任何元素節點。@*
:匹配任何屬性節點。node()
:匹配任何型別的節點。
例如,/bookstore/*
選擇 bookstore
元素的所有子元素節點。
選擇多個路徑
透過在XPath表示式中使用 |
運算子,您可以選擇多個路徑:
-
//book/title | //book/price
:選擇所有book
元素的title
和price
元素。 -
/bookstore/book/title | //price
:選擇bookstore
元素的book
元素的title
元素 和 文件中的所有price
元素。
XPath Axes(軸)
XML示例文件
以下是我們將在下面的示例中使用的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<title lang="en">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="en">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
XPath軸
在XPath中,軸表示與上下文(當前)節點的關係,並用於在樹上相對於該節點定位其他節點。以下是常用的XPath軸及其描述:
-
ancestor: 選擇當前節點的所有祖先(父、祖父等)。
-
ancestor-or-self: 選擇當前節點的所有祖先(父、祖父等)以及當前節點本身。
-
attribute: 選擇當前節點的所有屬性。
-
child: 選擇當前節點的所有子節點。
-
descendant: 選擇當前節點的所有後代(子、孫等)。
-
descendant-or-self: 選擇當前節點的所有後代(子、孫等)以及當前節點本身。
-
following: 選擇當前節點結束標籤之後的文件中的所有內容。
-
following-sibling: 選擇當前節點之後的所有同級節點。
-
namespace: 選擇當前節點的所有名稱空間節點。
-
parent: 選擇當前節點的父節點。
-
preceding: 選擇文件中在當前節點之前出現的所有節點,但不包括祖先、屬性節點和名稱空間節點。
-
preceding-sibling: 選擇當前節點之前的所有同級節點。
-
self: 選擇當前節點。
位置路徑表示式
位置路徑可以是絕對的或相對的。絕對位置路徑以斜槓(/)開頭,而相對位置路徑則不是。位置路徑由一個或多個步驟組成,每個步驟之間用斜槓分隔。
以下是一些XPath位置路徑表示式的示例及其結果:
-
/child::book
:選擇所有作為當前節點子元素的book
節點。 -
/attribute::lang
:選擇當前節點的lang
屬性。 -
/child::*
:選擇當前節點的所有元素子節點。 -
/attribute::*
:選擇當前節點的所有屬性。 -
/child::text()
:選擇當前節點的所有文字節點子節點。 -
/child::node()
:選擇當前節點的所有子節點。 -
/descendant::book
:選擇當前節點的所有book
後代。 -
/ancestor::book
:選擇當前節點的所有book
祖先。 -
/ancestor-or-self::book
:選擇當前節點的所有book
祖先,如果當前節點本身是一個book
節點,也選擇當前節點本身。 -
/child::*/child::price
:選擇當前節點的所有price
孫子節點。
XPath運算子
XPath表示式返回一個節點集、一個字串、一個布林值或一個數字。以下是XPath表示式中可用的運算子列表:
-
|
:計算兩個節點集。 -
+
:加法。 -
-
:減法。 -
*
:乘法。 -
div
:除法。 -
=
:等於。 -
!=
:不等於。 -
<
:小於。 -
<=
:小於或等於。 -
>
:大於。 -
>=
:大於或等於。 -
or
:或。 -
and
:與。 -
mod
:取模(除法餘數)。
最後
為了方便其他裝置和平臺的小夥伴觀看往期文章:
微信公眾號搜尋:Let us Coding
,關注後即可獲取最新文章推送
看完如果覺得有幫助,歡迎點贊、收藏、關注