XML中的XPath是什么

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

成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站設計、網(wǎng)站制作、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務魚峰,10余年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18982081108

 XPath 是一門在 XML 文檔中查找信息的語言。XPath 用于在 XML 文檔中通過元素和屬性進行導航。

什么是 XPath?

  • XPath 使用路徑表達式在 XML 文檔中進行導航

  • XPath 包含一個標準函數(shù)庫

  • XPath 是 XSLT 中的主要元素

  • XPath 是一個 W3C 標準

XPath 路徑表達式

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

XPath 標準函數(shù)

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

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

XPath 術(shù)語

節(jié)點(Node)

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

請看下面這個 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é)點例子:

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

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

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

基本值的例子:

J K. Rowling
"en"

項目(Item)

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

節(jié)點關(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é)點可有零個、一個或多個子。

在下面的例子中,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é)點

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

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

先輩(Ancestor)

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

在下面的例子中,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é)點的子,子的子,等等。

在下面的例子中,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(坐標軸)

XML 實例文檔

我們將在下面的例子中使用此 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 軸

軸可定義某個相對于當前節(jié)點的節(jié)點集。

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

位置路徑表達式

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

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

絕對位置路徑:

/step/step/...

相對位置路徑:

step/step/...

每個步均根據(jù)當前節(jié)點集之中的節(jié)點來進行計算。

步(step)包括:

  • 軸(axis)

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

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

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

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

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

步的語法:

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

實例

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

XPath 運算符

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

XPath 運算符

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

運算符描述實例返回值
|計算兩個節(jié)點集//book | //cd返回所有帶有 book 和 cd 元素的節(jié)點集
+加法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實例文檔

我們將在下面的例子中使用這個 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é)點選取

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

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

xmlDoc.selectNodes(路徑表達式)

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

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

xmlDoc.selectNodes("/bookstore/book")

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

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

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

選取 price

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

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

選取價格高于 35 的 price 價格

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

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

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

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

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

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

分享文章:XML中的XPath是什么
文章URL:http://bm7419.com/article44/jjsjee.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、品牌網(wǎng)站設計、微信公眾號、云服務器、網(wǎng)站維護、網(wǎng)頁設計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化