XPath即爲XML路徑語言,它是一種用來肯定XML(標準通用標記語言的子集)文檔中某部分位置的語言。XPath基於XML的樹狀結構,提供在數據結構樹中找尋節點的能力。起初 XPath 的提出的初衷是將其做爲一個通用的、介於XPointer與XSLT間的語法模型。可是 XPath 很快的被開發者採用來看成小型查詢語言。node
中文名數據結構
可擴展標記語言路徑語言ide
簡介設計
XPath 是一門在 XML 文檔中查找信息的語言。XPath 用於在 XML 文檔中經過元素和屬性進行導航。code
什麼是 XPath?orm
XPath 使用路徑表達式在 XML [1] 文檔中進行導航
XPath 包含一個標準函數庫
XPath 是 XSLT 中的主要元素
XPath 是一個 W3C 標準
XPath 使用路徑表達式在 XML 文檔中進行導航
XPath 包含一個標準函數庫
XPath 是 XSLT 中的主要元素
XPath 是一個 W3C 標準
選取節點 XPath 使用路徑表達式在 XML 文檔中選取節點。節點是經過沿着路徑或者 step 來選取的。
下面列出了最有用的路徑表達式:
表達式 |
描述 |
---|---|
nodename |
選取此節點的全部子節點。 |
/ |
從根節點選取。 |
// |
從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。 |
. |
選取當前節點。 |
.. |
選取當前節點的父節點。 |
@ |
選取屬性。 |
在下面的表格中,咱們已列出了一些路徑表達式以及表達式的結果:
路徑表達式 |
結果 |
---|---|
bookstore |
選取 bookstore 元素的全部子節點。 |
/bookstore |
選取根元素 bookstore。 註釋:假如路徑起始於正斜槓( / ),則此路徑始終表明到某元素的絕對路徑! |
bookstore/book |
選取屬於 bookstore 的子元素的全部 book 元素。 |
//book |
選取全部 book 子元素,而無論它們在文檔中的位置。 |
bookstore//book |
選擇屬於 bookstore 元素的後代的全部 book 元素,而無論它們位於 bookstore 之下的什麼位置。 |
//@lang |
選取名爲 lang 的全部屬性。 |
XPath 使用路徑表達式來選取 XML 文檔中的節點或者節點集。這些路徑表達式和咱們在常規的電腦文件系統中看到的表達式很是類似。路徑表達式是從一個XML節點(當前的上下文節點)到另外一個節點、或一組節點的書面步驟順序。這些步驟以「/」字符分開,每一步有三個構成成分:
軸描述(用最直接的方式接近目標節點)
節點測試(用於篩選節點位置和名稱)
節點描述(用於篩選節點的屬性和子節點特徵)
通常狀況下,咱們使用簡寫後的語法。雖然完整的軸描述是一種更加貼近人類語言,利用天然語言的單詞和語法來書寫的描述方式,可是相比之下也更加囉嗦。
下面列出了可用在 XPath 表達式中的運算符:
運算符 |
描述 |
實例 |
返回值 |
---|---|---|---|
| |
計算兩個節點集 |
//book | //cd |
返回全部擁有 book 和 cd 元素的節點集 |
+ |
加法 |
6 + 4 |
10 |
- |
減法 |
6 - 4 |
2 |
* |
乘法 |
6 * 4 |
24 |
div |
除法 |
8 div 4 |
2 |
= |
等於 |
price=9.80 |
若是 price 是 9.80,則返回 true。 若是 price 是 9.90,則返回 false。 |
!= |
不等於 |
price!=9.80 |
若是 price 是 9.90,則返回 true。 若是 price 是 9.80,則返回 false。 |
< |
小於 |
price<9.80 |
若是 price 是 9.00,則返回 true。 若是 price 是 9.90,則返回 false。 |
<= |
小於或等於 |
price<=9.80 |
若是 price 是 9.00,則返回 true。 若是 price 是 9.90,則返回 false。 |
> |
大於 |
price>9.80 |
若是 price 是 9.90,則返回 true。 若是 price 是 9.80,則返回 false。 |
>= |
大於或等於 |
price>=9.80 |
若是 price 是 9.90,則返回 true。 若是 price 是 9.70,則返回 false。 |
or |
或 |
price=9.80 or price=9.70 |
若是 price 是 9.80,則返回 true。 若是 price 是 9.50,則返回 false。 |
and |
與 |
price>9.00 and price<9.90 |
若是 price 是 9.80,則返回 true。 若是 price 是 8.50,則返回 false。 |
mod |
計算除法的餘數 |
5 mod 2 |
1 |
XPath 含有超過 100 個內建的函數。這些函數用於字符串值、數值,日期和時間比較、節點和 QName 處理、序列處理、邏輯值等等。
XPath 是 XSLT 標準中的主要元素。若是沒有 XPath 方面的知識,您就沒法建立 XSLT 文檔。
XQuery 和 XPointer 均構建於 XPath 表達式之上。XQuery 1.0 和 XPath 2.0 共享相同的數據模型,並支持相同的函數和運算符。
您能夠在咱們的《XQuery 教程》中閱讀更多有關 XQuery 的知識。
標準
XPath 於 1999年11月16日 成爲 W3C 標準。
XPath 被設計供 XSLT、XPointer 以及其餘 XML 解析軟件使用。
軸可定義相對於當前節點的節點集。
軸名稱 |
結果 |
---|---|
ancestor |
選取當前節點的全部先輩(父、祖父等)。 |
ancestor-or-self |
選取當前節點的全部先輩(父、祖父等)以及當前節點自己。 |
attribute |
選取當前節點的全部屬性。 |
child |
選取當前節點的全部子元素。 |
descendant |
選取當前節點的全部後代元素(子、孫等)。 |
descendant-or-self |
選取當前節點的全部後代元素(子、孫等)以及當前節點自己。 |
following |
選取文檔中當前節點的結束標籤以後的全部節點。 |
namespace |
選取當前節點的全部命名空間節點。 |
parent |
選取當前節點的父節點。 |
preceding |
選取文檔中當前節點的開始標籤以前的全部節點。 |
preceding-sibling |
選取當前節點以前的全部同級節點。 |
self |
選取當前節點。 |
每一個步均根據當前節點集之中的節點來進行計算。
軸(axis)
定義所選節點與當前節點之間的樹關係
節點測試(node-test)
識別某個軸內部的節點
零個或者更多謂語(predicate)
更深刻地提煉所選的節點集
軸名稱::節點測試[謂語]
例子 |
結果 |
---|---|
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 孫節點。 |
節點(Node)是XPath 的術語。
在 XPath 中,有七種類型的節點:元素、屬性、文本、命名空間、處理指令、註釋以及文檔(根)節點。XML 文檔是被做爲節點樹來對待的。樹的根被稱爲文檔節點或者根節點。[2]
每一個元素以及屬性都有一個父。
在下面的例子中,book 元素是 title、author、year 以及 price 元素的父:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<
book
>
<
title
>HarryPotter</
title
>
<
author
>JK.Rowling</
author
>
<
year
>2005</
year
>
<
price
>29.99</
price
>
</
book
>
|
元素節點可有零個、一個或多個子。
在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:
1
2
3
4
5
6
|
<
book
>
<
title
>HarryPotter</
title
>
<
author
>JK.Rowling</
author
>
<
year
>2005</
year
>
<
price
>29.99</
price
>
</
book
>
|
擁有相同的父的節點
在下面的例子中,title、author、year 以及 price 元素都是同胞:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<
book
>
<
title
>HarryPotter</
title
>
<
author
>JK.Rowling</
author
>
<
year
>2005</
year
>
<
price
>29.99</
price
>
</
book
>
|
某節點的父、父的父,等等。
在下面的例子中,title 元素的先輩是 book 元素和 bookstore 元素:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<
bookstore
>
<
book
>
<
title
>HarryPotter</
title
>
<
author
>JK.Rowling</
author
>
<
year
>2005</
year
>
<
price
>29.99</
price
>
</
book
>
</
bookstore
>
|
某個節點的子,子的子,等等。
在下面的例子中,bookstore 的後代是 book、title、author、year 以及 price 元素:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<
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表達式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<?
xml
version
=
"1.0"
encoding
=
"ISO-8859-1"
?>
<
bookstore
>
<
book
category
=
"COOKING"
>
<
title
lang
=
"en"
>Everyday Italian</
title
>
<
author
>Giada De Laurentiis</
author
>
<
year
>2005</
year
>
<
price
>30.00</
price
>
</
book
>
<
book
category
=
"CHILDREN"
>
<
title
lang
=
"en"
>Harry Potter</
title
>
<
author
>J K. Rowling</
author
>
<
year
>2005</
year
>
<
price
>29.99</
price
>
</
book
>
<
book
category
=
"WEB"
>
<
title
lang
=
"en"
>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
lang
=
"en"
>Learning XML</
title
>
<
author
>Erik T. Ray</
author
> <
year
>2003</
year
>
<
price
>39.95</
price
>
</
book
>
</
bookstore
>
|
HTML |
|
---|
XML |
|
---|
Web腳本 |
|
---|
Serv腳本 |
|
---|
.NET |
|
---|
多媒體 |
|
---|
文檔呈現語言 |
|
---|
樣式格式描述語言 |
|
---|
動態網頁技術 |
|
---|
客戶端交互技術 |
|
---|
客戶端腳本語言 |
|
---|
標識定位語言 |
|
---|
文檔綱要語言 |
|
---|