XPath Axes(軸)
XML 實(shí)例文檔
我們將在下面的例子中使用此 XML 文檔:
<?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book> <title lang="eng">Learning XML</title> <price>39.95</price> </book> </bookstore>
XPath 軸
軸可定義相對(duì)于當(dāng)前節(jié)點(diǎn)的節(jié)點(diǎn)集。
軸名稱 | 結(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 | 選取文檔中當(dāng)前節(jié)點(diǎn)的開始標(biāo)簽之前的所有節(jié)點(diǎn)。 |
preceding-sibling | 選取當(dāng)前節(jié)點(diǎn)之前的所有同級(jí)節(jié)點(diǎn)。 |
self | 選取當(dāng)前節(jié)點(diǎn)。 |
位置路徑表達(dá)式
位置路徑可以是絕對(duì)的,也可以是相對(duì)的。
絕對(duì)路徑起始于正斜杠( / ),而相對(duì)路徑不會(huì)這樣。在兩種情況中,位置路徑均包括一個(gè)或多個(gè)步,每個(gè)步均被斜杠分割:
絕對(duì)位置路徑:
/step/step/...
相對(duì)位置路徑:
step/step/...
每個(gè)步均根據(jù)當(dāng)前節(jié)點(diǎn)集之中的節(jié)點(diǎn)來進(jìn)行計(jì)算。
步(step)包括:
- 軸(axis)
- 定義所選節(jié)點(diǎn)與當(dāng)前節(jié)點(diǎn)之間的樹關(guān)系
- 節(jié)點(diǎn)測(cè)試(node-test)
- 識(shí)別某個(gè)軸內(nèi)部的節(jié)點(diǎn)
- 零個(gè)或者更多謂語(predicate)
- 更深入地提煉所選的節(jié)點(diǎn)集
步的語法:
軸名稱::節(jié)點(diǎn)測(cè)試[謂語]
實(shí)例
例子 | 結(jié)果 |
---|---|
child::book | 選取所有屬于當(dāng)前節(jié)點(diǎn)的子元素的 book 節(jié)點(diǎn)。 |
attribute::lang | 選取當(dāng)前節(jié)點(diǎn)的 lang 屬性。 |
child::* | 選取當(dāng)前節(jié)點(diǎn)的所有子元素。 |
attribute::* | 選取當(dāng)前節(jié)點(diǎn)的所有屬性。 |
child::text() | 選取當(dāng)前節(jié)點(diǎn)的所有文本子節(jié)點(diǎn)。 |
child::node() | 選取當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn)。 |
descendant::book | 選取當(dāng)前節(jié)點(diǎn)的所有 book 后代。 |
ancestor::book | 選擇當(dāng)前節(jié)點(diǎn)的所有 book 先輩。 |
ancestor-or-self::book | 選取當(dāng)前節(jié)點(diǎn)的所有 book 先輩以及當(dāng)前節(jié)點(diǎn)(如果此節(jié)點(diǎn)是 book 節(jié)點(diǎn)) |
child::*/child::price | 選取當(dāng)前節(jié)點(diǎn)的所有 price 孫節(jié)點(diǎn)。 |