XPath

XPath

XML路徑語言
XPath即為XML路徑語言(XML Path Language),它是一種用來确定XML文檔中某部分位置的語言。XPath基于XML的樹狀結構,提供在數據結構樹中找尋節點的能力。起初XPath的提出的初衷是将其作為一個通用的、介于XPointer與XSL間的語法模型。但是XPath很快地被開發者采用來當作小型查詢語言。
  • 中文名:可擴展标記語言路徑語言
  • 外文名:Xml Path Language
  • 别名:
  • 簡 稱:XPath
  • 釋 義:确定XML文檔中某部分位置的語言
  • 基 于:XML的樹狀結構
  • 用 途:查詢語言

語法

選取節點XPath使用路徑表達式在XML文檔中選取節點。節點是通過沿着路徑或者step來選取的。

下面列出了最有用的路徑表達式:

表達式

描述

nodename

選取此節點的所有子節點。

/

從根節點選取。

//

從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。

.

選取當前節點。

..

選取當前節點的父節點。

@

選取屬性。

在下面的表格中,我們已列出了一些路徑表達式以及表達式的結果:

路徑表達式

結果

bookstore

選取bookstore元素的所有子節點。

/bookstore

選取根元素bookstore。

注釋:假如路徑起始于正斜杠(/),則此路徑始終代表到某元素的絕對路徑!

bookstore/book

選取屬于bookstore的子元素的所有book元素。

//book

選取所有book子元素,而不管它們在文檔中的位置。

bookstore//book

選擇屬于bookstore元素的後代的所有book元素,而不管它們位于bookstore之下的什麼位置。

//@lang

選取名為lang的所有屬性。

表達式

XPath使用路徑表達式來選取XML文檔中的節點或者節點集。這些路徑表達式和我們在常規的電腦文件系統中看到的表達式非常相似。路徑表達式是從一個XML節點(當前的上下文節點)到另一個節點、或一組節點的書面步驟順序。這些步驟以“/”字符分開,每一步有三個構成成分:

1、軸描述(用最直接的方式接近目标節點)

2、節點測試(用于篩選節點位置和名稱)

3、節點描述(用于篩選節點的屬性和子節點特征)

一般情況下,我們使用簡寫後的語法。雖然完整的軸描述是一種更加貼近人類語言,利用自然語言的單詞和語法來書寫的描述方式,但是相比之下也更加啰嗦。

運算符

下面列出了可用在XPath表達式中的運算符:

運算符

描述

實例

返回值

|

計算兩個節點集

//book|//cd

返回所有擁有book和cd元素的節點集

+

加法

6+4

10

-

減法

6-4

2

*

乘法

6*4

24

div

除法

8div4

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.80orprice=9.70

如果price是9.80,

或者price是9.70,則返回true。

and

price>9.00andprice<9.90

如果price大于9.00,

并且price小于9.90,則返回true。

mod

計算除法的餘數

5mod2

1

标準函數

XPath含有超過100個内建的函數。這些函數用于字符串值、數值,日期和時間比較、節點和QName處理、序列處理、邏輯值等等。

使用

XPath是XSLT标準中的主要元素。如果沒有XPath方面的知識,您就無法創建XSLT文檔。

XQuery和XPointer均構建于XPath表達式之上。XQuery1.0和XPath2.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

選取當前節點。

每個步均根據當前節點集之中的節點來進行計算。

步(step)包括:

軸(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文檔是被作為節點樹來對待的。樹的根被稱為文檔節點或者根節點。

存取函數

名稱、說明

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建議下,XPath1.0于1999年11月16日發表。XPath2.0正在W3C審核過程的最終階段。XPath2.0表達了XPath語言在大小與能力上顯著的增加。

最值得一提的改變是XPath2.0有了更豐富的型别系統;XPath2.0支持不可分割型态,如在XMLS chema内建型态定義一樣,并且也可自綱要(schema)導入用戶自定型别。每個值都是一個序列(一個單一不可分割值或節點都被視為長度一的序列)。XPath1.0節點組被節點序列取代,它可以是任何順序。

為了支持更豐富的型别組,XPath2.0提供相當延展的函式與操作子群。

XPath2.0實際上是XQuery1.0的子集合。它提供了一個for表達式。該式是XQuery裡“FLWOR”表達式的縮減版。利用列出XQuery省去的部分來描述該語言是可能的。主要範例是查詢前導語(query prolog)、元素和屬性建構式、“FLWOR”語法的餘項式、以及typeswitch表達式。

相關詞條

相關搜索

其它詞條