軸名稱 |
結(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 |
直到所有這個(gè)節(jié)點(diǎn)的父輩節(jié)點(diǎn),順序選擇每個(gè)父輩節(jié)點(diǎn)前的所有同級(jí)節(jié)點(diǎn) |
preceding-sibling |
選取當(dāng)前節(jié)點(diǎn)之前的所有同級(jí)節(jié)點(diǎn)。 |
self |
選取當(dāng)前節(jié)點(diǎn)。 |
運(yùn)算符及特殊字符:
運(yùn)算符/特殊字符 |
說明 |
/ |
此路徑運(yùn)算符出現(xiàn)在模式開頭時(shí),表示應(yīng)從根節(jié)點(diǎn)選擇。 |
// |
從當(dāng)前節(jié)點(diǎn)開始遞歸下降,此路徑運(yùn)算符出現(xiàn)在模式開頭時(shí),表示應(yīng)從根節(jié)點(diǎn)遞歸下降。 |
. |
當(dāng)前上下文。 |
.. |
當(dāng)前上下文節(jié)點(diǎn)父級(jí)。 |
* |
通配符;選擇所有元素節(jié)點(diǎn)與元素名無關(guān)。(不包括文本,注釋,指令等節(jié)點(diǎn),如果也要包含這些節(jié)點(diǎn)請(qǐng)用node()函數(shù)) |
@ |
屬性名的前綴。 |
@* |
選擇所有屬性,與名稱無關(guān)。 |
: |
命名空間分隔符;將命名空間前綴與元素名或?qū)傩悦指簟?/p> |
( ) |
括號(hào)運(yùn)算符(優(yōu)先級(jí)最高),強(qiáng)制運(yùn)算優(yōu)先級(jí)。 |
[ ] |
應(yīng)用篩選模式(即謂詞,包括"過濾表達(dá)式"和"軸(向前/向后)")。 |
[ ] |
下標(biāo)運(yùn)算符;用于在集合中編制索引。 |
| |
兩個(gè)節(jié)點(diǎn)集合的聯(lián)合,如://messages/message/to | //messages/message/cc |
- |
減法。 |
div, |
浮點(diǎn)除法。 |
and, or |
邏輯運(yùn)算。 |
mod |
求余。 |
not() |
邏輯非 |
= |
等于 |
!= |
不等于 |
特殊比較運(yùn)算符 |
或者 lt; = 或者 lt;= > 或者 gt; >= 或者 gt;= 需要轉(zhuǎn)義的時(shí)候必須使用轉(zhuǎn)義的形式,如在XSLT中,而在XMLDOM的scripting中不需要轉(zhuǎn)義。 |
常用表達(dá)式實(shí)例:
/ |
Document Root文檔根. |
/* |
選擇文檔根下面的所有元素節(jié)點(diǎn),即根節(jié)點(diǎn)(XML文檔只有一個(gè)根節(jié)點(diǎn)) |
/node() |
根元素下所有的節(jié)點(diǎn)(包括文本節(jié)點(diǎn),注釋節(jié)點(diǎn)等) |
/text() |
查找文檔根節(jié)點(diǎn)下的所有文本節(jié)點(diǎn) |
/messages/message |
messages節(jié)點(diǎn)下的所有message節(jié)點(diǎn) |
/messages/message[1] |
messages節(jié)點(diǎn)下的第一個(gè)message節(jié)點(diǎn) |
/messages/message[1]/self::node() |
第一個(gè)message節(jié)點(diǎn)(self軸表示自身,node()表示選擇所有節(jié)點(diǎn)) |
/messages/message[1]/node() |
第一個(gè)message節(jié)點(diǎn)下的所有子節(jié)點(diǎn) |
/messages/message[1]/*[last()] |
第一個(gè)message節(jié)點(diǎn)的最后一個(gè)子節(jié)點(diǎn) |
/messages/message[1]/[last()] |
Error,謂詞前必須是節(jié)點(diǎn)或節(jié)點(diǎn)集 |
/messages/message[1]/node()[last()] |
第一個(gè)message節(jié)點(diǎn)的最后一個(gè)子節(jié)點(diǎn) |
/messages/message[1]/text() |
第一個(gè)message節(jié)點(diǎn)的所有子節(jié)點(diǎn) |
/messages/message[1]//text() |
第一個(gè)message節(jié)點(diǎn)下遞歸下降查找所有的文本節(jié)點(diǎn)(無限深度) |
/messages/message[1] /child::node() /messages/message[1] /node() /messages/message[position()=1]/node() //message[@id=1] /node() |
第一個(gè)message節(jié)點(diǎn)下的所有子節(jié)點(diǎn) |
//message[@id=1] //child::node() |
遞歸所有子節(jié)點(diǎn)(無限深度) |
//message[position()=1]/node() |
選擇id=1的message節(jié)點(diǎn)以及id=0的message節(jié)點(diǎn) |
/messages/message[1] /parent::* |
Messages節(jié)點(diǎn) |
/messages/message[1]/body/attachments/parent::node() /messages/message[1]/body/attachments/parent::* /messages/message[1]/body/attachments/.. |
attachments節(jié)點(diǎn)的父節(jié)點(diǎn)。父節(jié)點(diǎn)只有一個(gè),所以node()和* 返回結(jié)果一樣。 (..也表示父節(jié)點(diǎn). 表示自身節(jié)點(diǎn)) |
//message[@id=0]/ancestor::* |
Ancestor軸表示所有的祖輩,父,祖父等。 向上遞歸 |
//message[@id=0]/ancestor-or-self::* |
向上遞歸,包含自身 |
//message[@id=0]/ancestor::node() |
對(duì)比使用*,多一個(gè)文檔根元素(Document root) |
/messages/message[1]/descendant::node() //messages/message[1]//node() |
遞歸下降查找message節(jié)點(diǎn)的所有節(jié)點(diǎn) |
/messages/message[1]/sender/following::* |
查找第一個(gè)message節(jié)點(diǎn)的sender節(jié)點(diǎn)后的所有同級(jí)節(jié)點(diǎn),并對(duì)每一個(gè)同級(jí)節(jié)點(diǎn)遞歸向下查找。 |
//message[@id=1]/sender/following-sibling::* |
查找id=1的message節(jié)點(diǎn)的sender節(jié)點(diǎn)的所有后續(xù)的同級(jí)節(jié)點(diǎn)。 |
//message[@id=1]/datetime/@date |
查找id=1的message節(jié)點(diǎn)的datetime節(jié)點(diǎn)的date屬性 |
//message[@id=1]/datetime[@date] //message/datetime[attribute::date] |
查找id=1的message節(jié)點(diǎn)的所有含有date屬性的datetime節(jié)點(diǎn) |
//message[datetime] |
查找所有含有datetime節(jié)點(diǎn)的message節(jié)點(diǎn) |
//message/datetime/attribute::* //message/datetime/attribute::node() //message/datetime/@* |
返回message節(jié)點(diǎn)下datetime節(jié)點(diǎn)的所有屬性節(jié)點(diǎn) |
//message/datetime[attribute::*] //message/datetime[attribute::node()] //message/datetime[@*] //message/datetime[@node()] |
選擇所有含有屬性的datetime節(jié)點(diǎn) |
//attribute::* |
選擇根節(jié)點(diǎn)下的所有屬性節(jié)點(diǎn) |
//message[@id=0]/body/preceding::node() |
順序選擇body節(jié)點(diǎn)所在節(jié)點(diǎn)前的所有同級(jí)節(jié)點(diǎn)。(查找順序?yàn)椋合日业絙ody節(jié)點(diǎn)的頂級(jí)節(jié)點(diǎn)(根節(jié)點(diǎn)),得到根節(jié)點(diǎn)標(biāo)簽前的所有同級(jí)節(jié)點(diǎn),執(zhí)行完成后繼續(xù)向下一級(jí),順序得到該節(jié)點(diǎn)標(biāo)簽前的所有同級(jí)節(jié)點(diǎn),依次類推。) 注意:查找同級(jí)節(jié)點(diǎn)是順序查找,而不是遞歸查找。 |
//message[@id=0]/body/preceding-sibling::node() |
順序查找body標(biāo)簽前的所有同級(jí)節(jié)點(diǎn)。(和上例一個(gè)最大的區(qū)別是:不從最頂層開始到body節(jié)點(diǎn)逐層查找。我們可以理解成少了一個(gè)循環(huán),而只查找當(dāng)前節(jié)點(diǎn)前的同級(jí)節(jié)點(diǎn)) |
//message[@id=1]//*[namespace::amazon] |
查找id=1的所有message節(jié)點(diǎn)下的所有命名空間為amazon的節(jié)點(diǎn)。 |
//namespace::* |
文檔中的所有的命名空間節(jié)點(diǎn)。(包括默認(rèn)命名空間xmlns:xml) |
//message[@id=0]//books/*[local-name()='book'] |
選擇books下的所有的book節(jié)點(diǎn), 注意:由于book節(jié)點(diǎn)定義了命名空間amazone:book>.若寫成//message[@id=0]//books/book則查找不出任何節(jié)點(diǎn)。 |
//message[@id=0]//books/*[local-name()='book' and namespace-uri()='http://www.amazon.com/books/schema'] |
選擇books下的所有的book節(jié)點(diǎn),(節(jié)點(diǎn)名和命名空間都匹配) |
//message[@id=0]//books/*[local-name()='book'][year>2006] |
選擇year節(jié)點(diǎn)值>2006的book節(jié)點(diǎn) |
//message[@id=0]//books/*[local-name()='book'][1]/year>2006 |
指示第一個(gè)book節(jié)點(diǎn)的year節(jié)點(diǎn)值是否大于2006. 返回xs:boolean: true |
函數(shù)及說明:
值得欣喜的是XPath函數(shù)和XSLT,XQuery等共享函數(shù)庫,函數(shù)庫為我們提供了功能豐富的各種函數(shù)的調(diào)用,我們也可以自定義自己的函數(shù)。這里不再對(duì)每個(gè)函數(shù)的用法逐一說明,中文的可以參考這個(gè)網(wǎng)站, https://www.jb51.net/w3school/xpath/index.htm
XPath在DOM,XSLT及XQuery中的應(yīng)用
DOM:
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> html xmlns="http://www.w3.org/1999/xhtml"> head> title>XPath Test/title> /head> body> script language="javascript" type="text/javascript"> var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async="false"; xmlDoc.load("messages.xml"); xmlDoc.setProperty("SelectionLanguage", "XPath"); var sPath = "/messages/message[1]//books/*[local-name()='book']"; var bookNodes = xmlDoc.selectNodes(sPath); document.write("ul>"); for ( var i = 0; i bookNodes.length; i++) { document.write("li>" + bookNodes[i].childNodes[0].text + "/li>"); } document.write("/ul>"); /script> /body> /html>
注意:
我們?nèi)羰褂胣ew ActiveXObject("Microsoft.XMLDOM")則需要注意的是:因?yàn)樵缙诘腦MLDOM的SelectionLanguage屬性默認(rèn)是正則表達(dá)式,不是XPath語言。所以需要指定這樣一條語句xmlDoc.setProperty("SelectionLanguage", "XPath"); 以支持XPath查詢表達(dá)式。.
若沒有指定SelectionLanguage屬性值為XPath則要注意以下情況:
數(shù)組下標(biāo)從0開始(我們知道在XPath查詢表達(dá)式中數(shù)組下標(biāo)是從1開始的)不支持在XPath查詢表達(dá)式中使用XPath函數(shù)。
總結(jié)
以上就是本文關(guān)于Xpath語法格式總結(jié)的全部內(nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以參閱:MYSQL updatexml()函數(shù)報(bào)錯(cuò)注入解析、OGNL表達(dá)式基本語法與用法詳解、前端常見跨域解決方案(全)等,有什么問題可以隨時(shí)留言,歡迎大家討論交流。
標(biāo)簽:德州 宿遷 益陽 果洛 拉薩 西雙版納 寧夏 黃石
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Xpath語法格式總結(jié)》,本文關(guān)鍵詞 Xpath,語法,格式,總結(jié),Xpath,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。