WIKI使用導(dǎo)航
站長(zhǎng)百科導(dǎo)航
站長(zhǎng)專(zhuān)題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢(qián)
- 虛擬主機(jī)
- cPanel
- 網(wǎng)址導(dǎo)航專(zhuān)題
- 云計(jì)算
- 微博營(yíng)銷(xiāo)
- 虛擬主機(jī)管理系統(tǒng)
- 開(kāi)放平臺(tái)
- WIKI程序與應(yīng)用
- 美國(guó)十大主機(jī)
XPath
XPath即為XML路徑語(yǔ)言(XML Path Language),它是一種用來(lái)確定XML文檔中某部分位置的語(yǔ)言。
簡(jiǎn)介[ ]
XPath 是一門(mén)在 XML 文檔中查找信息的語(yǔ)言。XPath 用于在 XML 文檔中通過(guò)元素和屬性進(jìn)行導(dǎo)航。
什么是 XPath?
- XPath 使用路徑表達(dá)式在 XML 文檔中進(jìn)行導(dǎo)航
- XPath 包含一個(gè)標(biāo)準(zhǔn)函數(shù)庫(kù)
- XPath 是 XSLT 中的主要元素
- XPath 是一個(gè) W3C 標(biāo)準(zhǔn)
XPath 表示法[ ]
最常見(jiàn)的XPath表達(dá)式是路徑表達(dá)式(XPath這一名稱(chēng)的另一來(lái)源)。路徑表達(dá)式是從一個(gè)XML節(jié)點(diǎn)(當(dāng)前的上下文節(jié)點(diǎn))到另一個(gè)節(jié)點(diǎn)、或一組節(jié)點(diǎn)的書(shū)面步驟順序。這些步驟以“/”字符分開(kāi),每一步有三個(gè)構(gòu)成成分:
- 軸描述(用最直接的方式接近目標(biāo)節(jié)點(diǎn))
- 節(jié)點(diǎn)測(cè)試(用于篩選節(jié)點(diǎn)位置和名稱(chēng))
- 節(jié)點(diǎn)描述(用于篩選節(jié)點(diǎn)的屬性和子節(jié)點(diǎn)特征)
一般情況下,我們使用簡(jiǎn)寫(xiě)后的語(yǔ)法。雖然完整的軸描述是一種更加貼近人類(lèi)語(yǔ)言,利用自然語(yǔ)言的單詞和語(yǔ)法來(lái)書(shū)寫(xiě)的描述方式,但是相比之下也更加羅嗦。
簡(jiǎn)寫(xiě)后的語(yǔ)法最簡(jiǎn)單的XPath如下:
- /A/B/C
在這里選擇所有符合規(guī)矩的C節(jié)點(diǎn):C節(jié)點(diǎn)必須是B的子節(jié)點(diǎn)(B/C),同時(shí)B節(jié)點(diǎn)必須是A的子節(jié)點(diǎn)(A/B),而A是這個(gè)XML文檔的根節(jié)點(diǎn)(/A)。此時(shí)的這種描述法類(lèi)似于磁盤(pán)中文件的路徑(URI),從盤(pán)符開(kāi)始順著一級(jí)一級(jí)的目錄最終找到文件。
這里還有一個(gè)復(fù)雜一些的例子,包含了全部構(gòu)成成分(請(qǐng)?jiān)敿?xì)的看):
- A//B/*[1]
此時(shí)選擇的元素是:在B節(jié)點(diǎn)下的第一個(gè)節(jié)點(diǎn)(B/*[1]),不論節(jié)點(diǎn)的名稱(chēng)如何(*);而B(niǎo)節(jié)點(diǎn)必須出現(xiàn)在A節(jié)點(diǎn)內(nèi),不論和A節(jié)點(diǎn)之間相隔幾層節(jié)點(diǎn)(//B);與此同時(shí)A節(jié)點(diǎn)還必須是當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)(A,前邊沒(méi)有/)。
啰嗦的語(yǔ)法在未縮寫(xiě)語(yǔ)法里,兩個(gè)上述范例可以寫(xiě)為:
- /child::A/child::B/child::C
- child::A/descendant-or-self::B/child::node()[1]
在XPath的每個(gè)步驟里,通過(guò)完整的軸描述(例如:child或descendant-or-self)進(jìn)行明確的指定,然后使用::,它的后面跟著節(jié)點(diǎn)測(cè)試的內(nèi)容,例如上面范例所示的A以及node()。
XPath 標(biāo)準(zhǔn)函數(shù)[ ]
XPath 含有超過(guò) 100 個(gè)內(nèi)建的函數(shù)。這些函數(shù)用于字符串值、數(shù)值,日期和時(shí)間比較、節(jié)點(diǎn)和 QName 處理、序列處理、邏輯值等等。
XPath 節(jié)點(diǎn)[ ]
在 XPath 中,有七種類(lèi)型的節(jié)點(diǎn):元素、屬性、文本、命名空間、處理指令、注釋以及文檔節(jié)點(diǎn)(或稱(chēng)為根節(jié)點(diǎn))。
XPath 術(shù)語(yǔ)
節(jié)點(diǎn)(Node)
在 XPath 中,有七種類(lèi)型的節(jié)點(diǎn):元素、屬性、文本、命名空間、處理指令、注釋以及文檔(根)節(jié)點(diǎn)。XML 文檔是被作為節(jié)點(diǎn)樹(shù)來(lái)對(duì)待的。樹(shù)的根被稱(chēng)為文檔節(jié)點(diǎn)或者根節(jié)點(diǎn)。
XPath存取函數(shù)[ ]
名稱(chēng) 說(shuō)明
fn:node-name(node) 返回參數(shù)節(jié)點(diǎn)的節(jié)點(diǎn)名稱(chēng)。
fn:nilled(node) 返回是否拒絕參數(shù)節(jié)點(diǎn)的布爾值。
fn:data(item.item,...) 接受項(xiàng)目序列,并返回原子值序列。
fn:base-uri()
fn:base-uri(node)
返回當(dāng)前節(jié)點(diǎn)或指定節(jié)點(diǎn)的 base-uri 屬性的值。
fn:document-uri(node) 返回指定節(jié)點(diǎn)的 document-uri 屬性的值。
函數(shù)與運(yùn)算符XPath[ ]
1.0定義四種數(shù)據(jù)型別:節(jié)點(diǎn)型(本身無(wú)序的節(jié)點(diǎn)組)、字符串型、數(shù)字型、與布爾型。
有效的運(yùn)算符有:
- /、//以及..運(yùn)算符,一般用于軸描述。
- 合集運(yùn)算符 | 把兩個(gè)節(jié)點(diǎn)形成聯(lián)集。
- 布爾運(yùn)算符 and、or以及not()函數(shù)
- 數(shù)學(xué)運(yùn)算符 +、-、*、div(除)以及mod(取余數(shù))
- 比較操作子 =、!=(不等于)、<、>、<=、>=
函數(shù)有:
- 文字運(yùn)算函數(shù)
concat(), substring(), contains(), substring-before(), substring-after(), translate(), normalize-space(), string-length()
- 數(shù)學(xué)運(yùn)算函數(shù)
sum(), round(), floor(), ceiling()
- 節(jié)點(diǎn)屬性取得函數(shù)
name(), local-name(), namespace-uri()
- 處理上下文數(shù)據(jù)取得函數(shù)
position(), last()
- 類(lèi)型轉(zhuǎn)換函數(shù)
string(), number(), boolean()
XPath 2.0[ ]
在W3C建議下,XPath 1.0于1999年11月16日發(fā)表。XPath 2.0目前正在W3C審核過(guò)程的最終階段。XPath 2.0表達(dá)了XPath語(yǔ)言在大小與能力上顯著的增加。
最值得大書(shū)特書(shū)的改變是XPath 2.0有了更豐富的型別系統(tǒng);XPath 2.0支持不可分割型態(tài),如在XML Schema內(nèi)建型態(tài)定義一樣,并且也可自綱要(schema)導(dǎo)入用戶(hù)自定型別?,F(xiàn)在每個(gè)值都是一個(gè)序列(一個(gè)單一不可分割值或節(jié)點(diǎn)都被視為長(zhǎng)度一的序列)。XPath 1.0節(jié)點(diǎn)組被節(jié)點(diǎn)序列取代,它可以是任何順序。
為了支持更豐富的型別組,XPath 2.0提供相當(dāng)延展的函式與操作子群。
XPath 2.0實(shí)際上是XQuery 1.0的子集合。它提供了一個(gè)for表達(dá)式。該式是XQuery里“FLWOR”表達(dá)式的縮減版。利用列出XQuery省去的部分來(lái)描述該語(yǔ)言是可能的。主要范例是查詢(xún)前導(dǎo)語(yǔ)(query prolog)、元素和屬性建構(gòu)式、“FLWOR”語(yǔ)法的余項(xiàng)式、以及typeswitch表達(dá)式。