XPath Axes(軸)
XML 實例文檔
我們將在下面的例子中使用此 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 軸
軸可定義相對于當前節(jié)點的節(jié)點集。
| 軸名稱 | 結果 |
|---|---|
| ancestor | 選取當前節(jié)點的所有先輩(父、祖父等)。 |
| ancestor-or-self | 選取當前節(jié)點的所有先輩(父、祖父等)以及當前節(jié)點本身。 |
| attribute | 選取當前節(jié)點的所有屬性。 |
| child | 選取當前節(jié)點的所有子元素。 |
| descendant | 選取當前節(jié)點的所有后代元素(子、孫等)。 |
| descendant-or-self | 選取當前節(jié)點的所有后代元素(子、孫等)以及當前節(jié)點本身。 |
| following | 選取文檔中當前節(jié)點的結束標簽之后的所有節(jié)點。 |
| namespace | 選取當前節(jié)點的所有命名空間節(jié)點。 |
| parent | 選取當前節(jié)點的父節(jié)點。 |
| preceding | 選取文檔中當前節(jié)點的開始標簽之前的所有節(jié)點。 |
| preceding-sibling | 選取當前節(jié)點之前的所有同級節(jié)點。 |
| self | 選取當前節(jié)點。 |
位置路徑表達式
位置路徑可以是絕對的,也可以是相對的。
絕對路徑起始于正斜杠( / ),而相對路徑不會這樣。在兩種情況中,位置路徑均包括一個或多個步,每個步均被斜杠分割:
絕對位置路徑:
/step/step/...
相對位置路徑:
step/step/...
每個步均根據(jù)當前節(jié)點集之中的節(jié)點來進行計算。
步(step)包括:
- 軸(axis)
- 定義所選節(jié)點與當前節(jié)點之間的樹關系
- 節(jié)點測試(node-test)
- 識別某個軸內部的節(jié)點
- 零個或者更多謂語(predicate)
- 更深入地提煉所選的節(jié)點集
步的語法:
軸名稱::節(jié)點測試[謂語]
實例
| 例子 | 結果 |
|---|---|
| child::book | 選取所有屬于當前節(jié)點的子元素的 book 節(jié)點。 |
| attribute::lang | 選取當前節(jié)點的 lang 屬性。 |
| child::* | 選取當前節(jié)點的所有子元素。 |
| attribute::* | 選取當前節(jié)點的所有屬性。 |
| child::text() | 選取當前節(jié)點的所有文本子節(jié)點。 |
| child::node() | 選取當前節(jié)點的所有子節(jié)點。 |
| descendant::book | 選取當前節(jié)點的所有 book 后代。 |
| ancestor::book | 選擇當前節(jié)點的所有 book 先輩。 |
| ancestor-or-self::book | 選取當前節(jié)點的所有 book 先輩以及當前節(jié)點(如果此節(jié)點是 book 節(jié)點) |
| child::*/child::price | 選取當前節(jié)點的所有 price 孫節(jié)點。 |