Privacy Policy Cookie Policy Terms and Conditions XPath - Wikipedia

XPath

维基百科,自由的百科全书

XPath正在校对翻译,欢迎您积极校对与修订
原文在XPath
这是一篇從英文版維基百科原文翻譯成中文的翻譯條目
若您认为此條目的翻譯需要修訂或进一步增補,请勇於更新页面,作出您的贡献。

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

原本XPath動機於提供一種通用的、介於XPointerXSL間語法行為模型的渴望。XPath很快的被開發者採用來當作小型查詢語言。

目录

[编辑] 標記法

最常見的XPath表達式(同樣是該語言贏得這個稱號的由來)是路徑表示式。路徑表示式是從一個XML節點(現行" 上下文節點")到另一個節點、或一組節點的書面步驟順序。這些步驟以"/"(例:路徑)字元分開。每一步有三個構成要素:

  • 座標描述元
  • 節點測試
  • 述語(Predicate)

兩個標記法被定義,最後一個:簡寫語法,更為簡要,並允許XPath便於靠直覺和,在許多情況下,利用常見的字元和構造式來書寫閱讀。完整語法是比較囉唆,不過它允許更多選項被指定,而且如果小心閱讀的話它更具描述性。

[编辑] 簡寫語法

簡潔標記法允許對常見的實例使用許多預設與簡寫。最簡單的XPath記錄形式如:

  • /A/B/C

在這裡選擇C元素是B的子元素、B元素是A的子元素,A元素形成XML 文件的最外層。XPath語法設計來模擬URI(一致性資源識別碼)以及檔案路徑的語法。

更複雜的表達式可建立以三種方式:利用給定非預設'child'座標、或者其他非簡單的名稱的節點測試、或者可紀錄在任何步驟後方包括弧內的術語。例如,表達式:

  • A//B/*[1]

選擇第一個元素('[1]')不管他的名字是什麼('*'),是B元素的子元素('/'),而B元素本身是A的子元素或者其他更深的後裔('//')。A元素是現行背景點(表達式不以'/'為開始)。

[编辑] 延展語法

在完全的、未縮寫語法裡,兩個上述範例可以寫為:

  • /child::A/child::B/child::C
  • child::A/descendant-or-self::B/child::node()[1]

在這裡,於XPath每個步驟裡,座標(例如:childdescendant-or-self)是明確的指定,跟隨著::然後是節點測試,例如上面範例所示的Anode()

[编辑] 座標描述元

座標描述元表示XML文件分支樹表達式的瀏覽方向。這些座標──以全名然後縮寫語法──列舉如下:

child (子)
預設,不需要縮寫語法聲明
attribute (屬性)
@
descendant (後裔)
縮寫語法不提供
descendant-or-self (後裔或自己)
//
parent (父母)
.. 例如:點點
ancestor (先人)
縮寫語法不提供
ancestor-or-self (先人或自己)
縮寫語法不提供
following (追隨者)
縮寫語法不提供
preceding (前者)
縮寫語法不提供
following-sibling (追隨的兄弟姊妹)
縮寫語法不提供
preceding-sibling (前者的兄弟姊妹)
縮寫語法不提供
self (自己)
. 例如:點
namespace (名稱空間)
縮寫語法不提供

關於使用attribute座標簡寫語法的一個範例, //a/@href 在文件樹裡任何地方的元素下選擇了一個叫href的屬性。self座標最通常與述語同用,以參考現行選定節點。例如,h3[.='See also']在現行上下文選取了叫h3的元素,該元素文字內容是See also

[编辑] 節點測試

節點測試包括特定節點名或者更一般的表達式。至於XML裡命名空間字首gs已定義的文件,//gs:enquiry將找到所有在那命名空間裡enquiry的節點。

其他節點格式:

comment() 
尋找XML註釋節點,例如<!-- 註釋 -->
text() 
尋找某點的文字型別,例如hello<k>hello</k>
processing-instruction() 
尋找XML處理指令如<?php echo $a; ?>。在這個例子裡,將符合processing-instruction('php')會傳回值。
node() 
尋找所有點

[编辑] 述語(Predicates)

任何特異錯綜性表達式可在方括弧裡表示,這條件必須在XPath處理先前節點之前先被滿足。範例包括: //a[@href='help.php'], 這將比較 a 元素有沒有 href 屬性,並且該值是 help.php

在某一步驟可有多少個述語並沒有限制,而且它們不必要被限制在一條XPath語句的最後步驟。它們也可以套疊至任何深度。以述語描述的路徑開始於現行步驟的背景而且並不修改該背景。

//a[@href='help.php'][../div/@class='header']/@target 將會選擇 a 元素的 target 屬性值, 在這例子裡 a 元素有 href 屬性且值為 help.php, 以及 a 元素有父輩 div 元素,其本身有 class 屬性,值為 header

[编辑] 公式與操作子

XPath 1.0定義四種資料型別:節點組(本身無序的節點組)、字串、數字、與布林

有效操作子有:

  • "/", "//" 以及 "[...]"操作子,慣用於路徑表達式,如上所述。
  • 聯集操作子 "|"為兩個節點形成聯集。
  • 布林操作子 "and","or",以及函數"not()"
  • 算數操作子 "+","-","*","div"(除),以及"mod"(餘數)
  • 比較操作子 "=", "!=", "<", ">", "<=", ">="

公式館包括:

  • 操作字串公式: concat(), substring(), contains(), substring-before(), substring-after(), translate(), normalize-space(), string-length()
  • 操作數字公式: sum(), round(), floor(), ceiling()
  • 節點屬性取得公式: name(), local-name(), namespace-uri()
  • 處理上下文資訊取得公式: position(), last()
  • 型別轉換公式: string(), number(), boolean()

某些常用的公式詳列如下。完整明細請參照W3C建議書

[编辑] 節點組公式

position() 
返回符合XPath到該點間一組內,根據比較它的兄弟點而得的,代表該節點位置數。
count(node-set
返回符合XPath指定於參數的一組節點。

[编辑] 字串公式

string(object?) 
根據內建法則轉換任何四種XPath資料型別為字串。參數可為XPath,在這裡符合條件節點(群)轉換成返回字串。
concat(string, string, string*) 
連結任何數量字串。
contains(s1, s2
如果s1包含s2返回真。
normalize-space(string?) 
所有帶頭和結尾的空白字元都被移除,且大於兩個以上的空白字元會被置換成單一空白。這對對付原本XML因列印關係被美化──這可能讓後來的字串處理不可靠──這種情況時相當有用。

[编辑] 布林公式

not(boolean
布林公式相反化.

[编辑] 數公式

sum(node-set
根據內建轉型規則,轉換所有XPath參數定義找到的節點字串值成為數字,然後返回這些數字總合

使用操作子:=, !=, <=, <, >=>的表達式可以創造於術語內。布林表達式可用括弧()、布林操作子andor、和/或者上述的not()公式聯合起來。數值計算使用*, +, -, divmod。字串可包含任何Unicode字元。

述語內外,整個節點組可利用"|"字元聯合起來。

v[x or y] | w[z] 會返回單一節點組,包括現行上下文找到的所有擁有xy子元素的v 元素、有z子元素的w元素。

//item[@price > 2*@discount] 會選取price屬性至少兩倍於discount屬性數值的物件

[编辑] XPath 2.0

W3C建議下,XPath 1.0於1999年十一月十六號發表。XPath 2.0目前正在W3C審核過程的最終階段。XPath 2.0表達了XPath語言在大小與能力上顯著的增加。

最值得大書特書的改變是XPath 2.0有了更豐富的型別系統;XPath 2.0支援不可分割型態,如在XML Schema內建型態定義一樣,並且也可自綱要(schema)導入用戶自定型別。現在每個值都是一個序列(一個單一不可分割值或節點都被視為長度一的序列)。XPath 1.0節點組被節點序列取代,它可以是任何順序。

為了支援更豐富的型別組,XPath 2.0提供相當延展的公式與操作子群。

XPath 2.0實際上是XQuery 1.0的子集合。它提供了一個for表達式。該式是XQuery裡"FLWOR"表達式的縮減版。利用列出XQuery省去的部分來描述該語言是可能的。主要範例是查詢前導語(query prolog)、元素和屬性建構式、"FLWOR"語法的餘項式、以及typeswitch表達式。

[编辑] 参看

[编辑] 外部链接

網頁技術與標準编辑

文档呈现语言: HTML* | XHTML* | XML* | XForms*

样式格式描述语言: CSS* | XSL*

动态网页技术: CGI | ASP | ASP.NET | ColdFusion | JSP | PHP

客户端交互技术: ActiveX | Java Applet | Flash | AJAX | XMLHTTP*

客户端脚本语言: JavaScript | JScript | VBScript | ECMAScript

标识定位语言: URL | URI | XPath |

文档纲要语言: DTD* | XML Schema*

* 由W3C制定和维护的标准与规范
THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu