您好,登錄后才能下訂單哦!
XML中的XPath是什么?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
XPath 是一門在 XML 文檔中查找信息的語言。XPath 用于在 XML 文檔中通過元素和屬性進(jìn)行導(dǎo)航。
XPath 使用路徑表達(dá)式在 XML 文檔中進(jìn)行導(dǎo)航
XPath 包含一個標(biāo)準(zhǔn)函數(shù)庫
XPath 是 XSLT 中的主要元素
XPath 是一個 W3C 標(biāo)準(zhǔn)
XPath 使用路徑表達(dá)式來選取 XML 文檔中的節(jié)點(diǎn)或者節(jié)點(diǎn)集。這些路徑表達(dá)式和我們在常規(guī)的電腦文件系統(tǒng)中看到的表達(dá)式非常相似。
XPath 含有超過 100 個內(nèi)建的函數(shù)。這些函數(shù)用于字符串值、數(shù)值,日期和時間比較、節(jié)點(diǎn)和 QName 處理、序列處理、邏輯值等等。
在 XPath 中,有七種類型的節(jié)點(diǎn):元素、屬性、文本、命名空間、處理指令、注釋以及文檔節(jié)點(diǎn)(或成為根節(jié)點(diǎn))。
在 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))
基本值是無父或無子的節(jié)點(diǎn)。
基本值的例子:
J K. Rowling "en"
項目是基本值或者節(jié)點(diǎn)。
每個元素以及屬性都有一個父。
在下面的例子中,book 元素是 title、author、year 以及 price 元素的父:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
元素節(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>
擁有相同的父的節(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>
某節(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>
某個節(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 文檔:
<?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>
軸可定義某個相對于當(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)。 |
位置路徑可以是絕對的,也可以是相對的。
絕對路徑起始于正斜杠( / ),而相對路徑不會這樣。在兩種情況中,位置路徑均包括一個或多個步,每個步均被斜杠分割:
/step/step/...
step/step/...
每個步均根據(jù)當(dāng)前節(jié)點(diǎn)集之中的節(jié)點(diǎn)來進(jìn)行計算。
軸(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)測試[謂語]
例子 | 結(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 表達(dá)式中的運(yùn)算符:
運(yùn)算符 | 描述 | 實(shí)例 | 返回值 |
---|---|---|---|
| | 計算兩個節(jié)點(diǎn)集 | //book | //cd | 返回所有帶有 book 和 cd 元素的節(jié)點(diǎn)集 |
+ | 加法 | 6 + 4 | 10 |
- | 減法 | 6 - 4 | 2 |
* | 乘法 | 6 * 4 | 24 |
p | 除法 | 8 p 4 | 2 |
= | 等于 | 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。 |
or | 或 | price=9.80 or price=9.70 | 如果 price 是 9.80,則返回 true。 如果 price 是 9.50,則返回 fasle。 |
and | 與 | price>9.00 and price<9.90 | 如果 price 是 9.80,則返回 true。 如果 price 是 8.50,則返回 fasle。 |
mod | 計算除法的余數(shù) | 5 mod 2 | 1 |
我們將在下面的例子中使用這個 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>
我們將使用微軟的 XML DOM 對象來載入 XML 文檔,并使用 selectNodes() 函數(shù)從 XML 文檔選取節(jié)點(diǎn):
set xmlDoc=CreateObject("Microsoft.XMLDOM") xmlDoc.async="false" xmlDoc.load("books.xml") xmlDoc.selectNodes(路徑表達(dá)式)
下面的這個例子選取了 bookstore 元素下所有的 book 節(jié)點(diǎn):
xmlDoc.selectNodes("/bookstore/book")
下面的例子僅選取 bookstore 元素下第一個 book 節(jié)點(diǎn):
xmlDoc.selectNodes("/bookstore/book[0]")
下面的例子從所有的 price 節(jié)點(diǎn)選取文本:
xmlDoc.selectNodes("/bookstore/book/price/text()")
下面的例子會選取所有價格高于 35 的 price 節(jié)點(diǎn):
xmlDoc.selectNodes("/bookstore/book[price>35]/price")
下面的例子會選取所有價格高于 35 的 title 節(jié)點(diǎn):
xmlDoc.selectNodes("/bookstore/book[price>35]/title")
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(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)容。