溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

XML中的XPath是什么

發(fā)布時間:2020-07-10 15:50:20 來源:億速云 閱讀:190 作者:Leah 欄目:編程語言

XML中的XPath是什么?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

 XPath 是一門在 XML 文檔中查找信息的語言。XPath 用于在 XML 文檔中通過元素和屬性進(jìn)行導(dǎo)航。

什么是 XPath?

  • XPath 使用路徑表達(dá)式在 XML 文檔中進(jìn)行導(dǎo)航

  • XPath 包含一個標(biāo)準(zhǔn)函數(shù)庫

  • XPath 是 XSLT 中的主要元素

  • XPath 是一個 W3C 標(biāo)準(zhǔn)

XPath 路徑表達(dá)式

XPath 使用路徑表達(dá)式來選取 XML 文檔中的節(jié)點(diǎn)或者節(jié)點(diǎn)集。這些路徑表達(dá)式和我們在常規(guī)的電腦文件系統(tǒng)中看到的表達(dá)式非常相似。

XPath 標(biāo)準(zhǔn)函數(shù)

XPath 含有超過 100 個內(nèi)建的函數(shù)。這些函數(shù)用于字符串值、數(shù)值,日期和時間比較、節(jié)點(diǎn)和 QName 處理、序列處理、邏輯值等等。

在 XPath 中,有七種類型的節(jié)點(diǎn):元素、屬性、文本、命名空間、處理指令、注釋以及文檔節(jié)點(diǎn)(或成為根節(jié)點(diǎn))。

XPath 術(shù)語

節(jié)點(diǎn)(Node)

在 XPath 中,有七種類型的節(jié)點(diǎn):元素、屬性、文本、命名空間、處理指令、注釋以及文檔(根)節(jié)點(diǎn)。XML 文檔是被作為節(jié)點(diǎn)樹來對待的。樹的根被稱為文檔節(jié)點(diǎn)或者根節(jié)點(diǎn)。

請看下面這個 XML 文檔:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>
  <title lang="en">Harry Potter</title>
  <author>J K. Rowling</author> 
  <year>2005</year>
  <price>29.99</price>
</book>

</bookstore>

上面的XML文檔中的節(jié)點(diǎn)例子:

<bookstore> (文檔節(jié)點(diǎn))
<author>J K. Rowling</author> (元素節(jié)點(diǎn))
lang="en" (屬性節(jié)點(diǎn))

基本值(或稱原子值,Atomic value)

基本值是無父或無子的節(jié)點(diǎn)。

基本值的例子:

J K. Rowling
"en"

項目(Item)

項目是基本值或者節(jié)點(diǎn)。

節(jié)點(diǎn)關(guān)系

父(Parent)

每個元素以及屬性都有一個父。

在下面的例子中,book 元素是 title、author、year 以及 price 元素的父:

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

子(Children)

元素節(jié)點(diǎn)可有零個、一個或多個子。

在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

同胞(Sibling)

擁有相同的父的節(jié)點(diǎn)

在下面的例子中,title、author、year 以及 price 元素都是同胞:

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

先輩(Ancestor)

某節(jié)點(diǎn)的父、父的父,等等。

在下面的例子中,title 元素的先輩是 book 元素和 bookstore 元素:

<bookstore>

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

</bookstore>

后代(Descendant)

某個節(jié)點(diǎn)的子,子的子,等等。

在下面的例子中,bookstore的后代是 book、title、author、year 以及 price 元素:

<bookstore>

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

</bookstore>

XPath Axes(坐標(biāo)軸)

XML 實(shí)例文檔

我們將在下面的例子中使用此 XML 文檔:

<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>

<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>

</bookstore>

XPath 軸

軸可定義某個相對于當(dāng)前節(jié)點(diǎn)的節(jié)點(diǎn)集。

軸名稱結(jié)果
ancestor選取當(dāng)前節(jié)點(diǎn)的所有先輩(父、祖父等)
ancestor-or-self選取當(dāng)前節(jié)點(diǎn)的所有先輩(父、祖父等)以及當(dāng)前節(jié)點(diǎn)本身
attribute選取當(dāng)前節(jié)點(diǎn)的所有屬性
child選取當(dāng)前節(jié)點(diǎn)的所有子元素。
descendant選取當(dāng)前節(jié)點(diǎn)的所有后代元素(子、孫等)。
descendant-or-self選取當(dāng)前節(jié)點(diǎn)的所有后代元素(子、孫等)以及當(dāng)前節(jié)點(diǎn)本身。
following選取文檔中當(dāng)前節(jié)點(diǎn)的結(jié)束標(biāo)簽之后的所有節(jié)點(diǎn)。
namespace選取當(dāng)前節(jié)點(diǎn)的所有命名空間節(jié)點(diǎn)
parent選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)。
preceding選取文檔中當(dāng)前節(jié)點(diǎn)的開始標(biāo)簽之前的所有節(jié)點(diǎn)。
preceding-sibling選取當(dāng)前節(jié)點(diǎn)之前的所有同級節(jié)點(diǎn)。
self選取當(dāng)前節(jié)點(diǎn)。

位置路徑表達(dá)式

位置路徑可以是絕對的,也可以是相對的。

絕對路徑起始于正斜杠( / ),而相對路徑不會這樣。在兩種情況中,位置路徑均包括一個或多個步,每個步均被斜杠分割:

絕對位置路徑:

/step/step/...

相對位置路徑:

step/step/...

每個步均根據(jù)當(dāng)前節(jié)點(diǎn)集之中的節(jié)點(diǎn)來進(jìn)行計算。

步(step)包括:

  • 軸(axis)

  • 定義所選節(jié)點(diǎn)與當(dāng)前節(jié)點(diǎn)之間的樹關(guān)系

  • 節(jié)點(diǎn)測試(node-test)

  • 識別某個軸內(nèi)部的節(jié)點(diǎn)

  • 零個或者更多謂語(predicate)

  • 更深入地提煉所選的節(jié)點(diǎn)集

步的語法:

軸名稱::節(jié)點(diǎn)測試[謂語]

實(shí)例

例子結(jié)果
child::book選取所有屬于當(dāng)前節(jié)點(diǎn)的子元素的 book 節(jié)點(diǎn)
attribute::lang選取當(dāng)前節(jié)點(diǎn)的 lang 屬性
child::*選取當(dāng)前節(jié)點(diǎn)的所有子元素
attribute::*選取當(dāng)前節(jié)點(diǎn)的所有屬性
child::text()選取當(dāng)前節(jié)點(diǎn)的所有文本子節(jié)點(diǎn)
child::node()選取當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn)
descendant::book選取當(dāng)前節(jié)點(diǎn)的所有 book 后代
ancestor::book選擇當(dāng)前節(jié)點(diǎn)的所有 book 先輩
ancestor-or-self::book選取當(dāng)前節(jié)點(diǎn)的所有book先輩以及當(dāng)前節(jié)點(diǎn)(假如此節(jié)點(diǎn)是book節(jié)點(diǎn)的話)
child::*/child::price選取當(dāng)前節(jié)點(diǎn)的所有 price 孫。

XPath 運(yùn)算符

XPath 表達(dá)式可返回節(jié)點(diǎn)集、字符串、邏輯值以及數(shù)字。

XPath 運(yùn)算符

下面列出了可用在 XPath 表達(dá)式中的運(yùn)算符:

運(yùn)算符描述實(shí)例返回值
|計算兩個節(jié)點(diǎn)集//book | //cd返回所有帶有 book 和 cd 元素的節(jié)點(diǎn)集
+加法6 + 410
-減法6 - 42
*乘法6 * 424
p除法8 p 42
=等于price=9.80

如果 price 是 9.80,則返回 true。

如果 price 是 9.90,則返回 fasle。

!=不等于price!=9.80

如果 price 是 9.90,則返回 true。

如果 price 是 9.80,則返回 fasle。

<小于price<9.80

如果 price 是 9.00,則返回 true。

如果 price 是 9.90,則返回 fasle。

<=小于或等于price<=9.80

如果 price 是 9.00,則返回 true。

如果 price 是 9.90,則返回 fasle。

>大于price>9.80

如果 price 是 9.90,則返回 true。

如果 price 是 9.80,則返回 fasle。

>=大于或等于price>=9.80

如果 price 是 9.90,則返回 true。

如果 price 是 9.70,則返回 fasle。

orprice=9.80 or price=9.70

如果 price 是 9.80,則返回 true。

如果 price 是 9.50,則返回 fasle。

andprice>9.00 and price<9.90

如果 price 是 9.80,則返回 true。

如果 price 是 8.50,則返回 fasle。

mod計算除法的余數(shù)5 mod 21

XML實(shí)例文檔

我們將在下面的例子中使用這個 XML 文檔:

"books.xml" :

<?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>

節(jié)點(diǎn)選取

我們將使用微軟的 XML DOM 對象來載入 XML 文檔,并使用 selectNodes() 函數(shù)從 XML 文檔選取節(jié)點(diǎn):

set xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("books.xml")

xmlDoc.selectNodes(路徑表達(dá)式)

選取所有的 book 節(jié)點(diǎn)

下面的這個例子選取了 bookstore 元素下所有的 book 節(jié)點(diǎn):

xmlDoc.selectNodes("/bookstore/book")

選取第一個 book 節(jié)點(diǎn)

下面的例子僅選取 bookstore 元素下第一個 book 節(jié)點(diǎn):

xmlDoc.selectNodes("/bookstore/book[0]")

選取 price

下面的例子從所有的 price 節(jié)點(diǎn)選取文本:

xmlDoc.selectNodes("/bookstore/book/price/text()")

選取價格高于 35 的 price 價格

下面的例子會選取所有價格高于 35 的 price 節(jié)點(diǎn):

xmlDoc.selectNodes("/bookstore/book[price>35]/price")

選取價格高于 35 的 title 節(jié)點(diǎn)

下面的例子會選取所有價格高于 35 的 title 節(jié)點(diǎn):

xmlDoc.selectNodes("/bookstore/book[price>35]/title")

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI