XML中的XPath是什么?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
成都創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)魚峰,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108
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 文檔:
Harry Potter J K. Rowling 2005 29.99
上面的XML文檔中的節(jié)點(diǎn)例子:
(文檔節(jié)點(diǎn)) J K. Rowling (元素節(jié)點(diǎn)) lang="en" (屬性節(jié)點(diǎn))
基本值是無父或無子的節(jié)點(diǎn)。
基本值的例子:
J K. Rowling "en"
項(xiàng)目是基本值或者節(jié)點(diǎn)。
每個元素以及屬性都有一個父。
在下面的例子中,book 元素是 title、author、year 以及 price 元素的父:
Harry Potter J K. Rowling 2005 29.99
元素節(jié)點(diǎn)可有零個、一個或多個子。
在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:
Harry Potter J K. Rowling 2005 29.99
擁有相同的父的節(jié)點(diǎn)
在下面的例子中,title、author、year 以及 price 元素都是同胞:
Harry Potter J K. Rowling 2005 29.99
某節(jié)點(diǎn)的父、父的父,等等。
在下面的例子中,title 元素的先輩是 book 元素和 bookstore 元素:
Harry Potter J K. Rowling 2005 29.99
某個節(jié)點(diǎn)的子,子的子,等等。
在下面的例子中,bookstore的后代是 book、title、author、year 以及 price 元素:
Harry Potter J K. Rowling 2005 29.99
XPath Axes(坐標(biāo)軸)
我們將在下面的例子中使用此 XML 文檔:
Harry Potter 29.99 Learning XML 39.95
軸可定義某個相對于當(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)行計(jì)算。
軸(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í)例 | 返回值 |
---|---|---|---|
| | 計(jì)算兩個節(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 | 計(jì)算除法的余數(shù) | 5 mod 2 | 1 |
我們將在下面的例子中使用這個 XML 文檔:
Everyday Italian Giada De Laurentiis 2005 30.00 Harry Potter J K. Rowling 2005 29.99 XQuery Kick Start James McGovern Per Bothner Kurt Cagle James Linn Vaidyanathan Nagarajan 2003 49.99 Learning XML Erik T. Ray 2003 39.95
我們將使用微軟的 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)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。