XPath定位路徑


一個定位路徑表達式返回一個節點集。
定位路徑表達式
一個定位路徑可以是絕對的或相對的。
絕對定位路徑以一個斜線(/)開頭,而相對定位路徑沒有。兩種情況下,定位路徑由一個或多個定位步驟組成,每個步驟由一個斜線分隔:
一個絕對定位路徑: /step/step/... 一個相對定位路徑: step/step/... |
定位步驟從左到右,依次按順序計算。每個步驟根據當前節點集的節點計算。如果定位路徑是絕對的,那么當前節點集包含根節點。如果定位路徑是相對的,那么當前節點集包含使用表達式的節點。定位步驟包括:
- 一個軸(指定當前定位步驟和當前節點選擇的節點間的樹關系)
- 一個節點測試(指定定位步驟選擇的節點的節點類型和擴展名)
- 零或多個預測(使用表達式進一步抽取定位步驟選定的節點集)
一個定位步驟的語法為:
軸名::節點測試[預測] |
示例:
child::price[price=9.90] |
軸和節點測試
一個軸定義相對于當前節點的節點集。節點測試用于識別軸內的一個節點。我們可以通過名或類型來執行一個節點測試。
軸名 | 描述 |
ancestor |
包含當前節點的所有祖先節點 注意: 除非當前節點是根節點,否則這個軸始終包括根節點 |
ancestor-or-self | 包括當前節點和所有當前節點的祖先節點 |
attribute | 包含當前節點所有的屬性 |
child | 包含當前節點所有的子節點 |
descendant |
包含當前節點的所有后代節點 注意:這個軸不包括屬性或命名空間節點 |
descendant-or-self | 包含當前節點本身和所有它的后代節點 |
following | 包含文檔中當前節點的結束標記后所有節點 |
following-sibling | 包含當前節點后所有的同層節點
注意: 如果當前節點是屬性節點或命名空間節點,那么這個軸為空 |
namespace | 包含當前節點的所有命名空間節點 |
parent | 包含當前節點的所有父節點 |
preceding | 包含文檔中當前節點的開始標記之前的所有節點 |
preceding-sibling | 包含當前節點之前的所有同層節點
注意: 如果當前節點是一個屬性節點或者命名空間節點,那么這個軸為空 |
self | 當前節點本身 |
示例
示例 | 結果 |
child::cd | 選擇當前節點的子節點中所有的cd元素(如果當前節點沒有cd子節點,那么將返回一個空節點集) |
attribute::src | 選擇當前節點的src屬性(如果當前節點沒有src屬性,那么返回一個空節點集) |
child::* | 選擇當前節點的所有子元素 |
attribute::* | 選擇當前節點的所有屬性 |
child::text() | 選擇當前節點的文本節點子節點 |
child::node() | 選擇當前節點的所有子節點 |
descendant::cd | 選擇當前節點的后代中所有cd元素 |
ancestor::cd | 選擇當前節點的祖先節點中所有cd元素 |
ancestor-or-self::cd | 選擇當前節點的祖先節點中所有cd元素,如果當前節點是一個cd元素,那么也包括當前節點 |
child::*/child::price |
選擇當前節點的孫子節點中所有price元素 |
/ | 選擇文檔根 |
預測
一個預測過濾一個節點集為一個新的節點集。預測放在方括號([])中。
示例
示例 | 結果 |
child::price[price=9.90] | 選擇當前節點的子節點中price元素等于9.90的所有價格元素 |
child::cd[position()=1] | 選擇當前節點的第一個cd子元素 |
child::cd[position()=last()] | 選擇當前節點的最后一個cd子元素 |
child::cd[position()=last()-1] | 選擇當前節點的倒第二個cd元素 |
child::cd[position()<6] | 選擇當前節點的前五個cd元素 |
/descendant::cd[position()=7] | 選擇文檔中第七個cd元素 |
child::cd[attribute::type="classic"] | 選擇當前節點的所有type屬性等于classic的cd子節點 |
定位路徑縮寫語法
定位路徑可以用縮寫表示。
最重要的縮寫為:child::可以從一個定位步驟中省略。
縮寫 | 含義 | 示例 |
none | child:: | cd是child::cd的簡寫 |
@ | attribute:: | cd[@type="classic"]是child::cd[attribute::type="classic"]的簡寫 |
. | self::node() | .//cd是self::node()/descendant-or-self::node()/child::cd的簡寫 |
.. | parent::node() |
../cd是parent::node()/child::cd的簡寫 |
// | /descendant-or-self::node()/ | //cd是/descendant-or-self::node()/child::cd的簡寫 |
示例
示例 | 結果 |
cd | 選擇當前節點的子節點中所有cd元素 |
* | 選擇當前節點的所有子元素 |
text() | 選擇當前節點的子節點中所有文本節點 |
@src | 選擇當前節點的所有src屬性 |
@* | 選擇當前節點的所有屬性 |
cd[1] | 選擇當前節點的第一個cd子節點 |
cd[last()] | 選擇當前節點的最后一個cd子節點 |
*/cd | 選擇當前節點的所有cd孫子節點 |
/book/chapter[3]/para[1] | 選擇book節點的第三個chapter子節點的第一個para子節點 |
//cd | 選擇所有文檔根的所有cd元素后代,因而在同一個文檔選擇所有的cd元素作為當前節點 |
. | 選擇當前節點 |
.//cd | 選擇當前節點的cd元素后代 |
.. | 選擇當前節點的父親節點 |
../@src | 選擇當前節點的父節點的src屬性 |
cd[@type="classic"] | 選擇當前節點的子節點中type屬性等于classic的所有cd子節點 |
cd[@type="classic"][5] | 選擇當前節點的子節點中type屬性等于classic的cd子節點中第五個節點 |
cd[5][@type="classic"] | 選擇當前節點的第五個cd子節點,如果該子節點的type屬性等于classic |
cd[@type and @country] | 選擇當前節點的子節點中由type和country兩個屬性的所有cd子節點 |
http://61.139.52.111:8090/kj/Manfeel/oltl/session1/session1-p03.htm

