XPath定位路徑


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


posted on 2008-03-05 10:16 揚(yáng)揚(yáng) 閱讀(1308) 評論(0) 編輯 收藏