XPath 四大資料型別
| 型別 | 說明 | 轉換性 |
| 節點集 (node-set) |
路徑匹配回傳的節點集合,唯一無法從其他型別轉換而來 |
不可轉換 |
| 布林值 (boolean) |
true/false,函式或比較運算結果 |
可與數值、字串互轉 |
| 字串 (string) |
字元序列,提供豐富字串函式 |
可與數值、布林互轉 |
| 數值 (number) |
IEEE 754 雙精度浮點數,含 NaN、Infinity、±0 |
可與布林、字串互轉 |
XPath 七種節點類型
- 根節點 (Root Node):樹最頂層,唯一,所有元素皆其子孫
- 元素節點 (Element Nodes):對應 XML 元素,可有屬性、子元素、註解、處理指令、文字
- 文字節點 (Text Nodes):CDATA 區塊內容,無緊鄰兄弟文字節點,無擴展名
- 屬性節點 (Attribute Nodes):元素的屬性集合,父節點為元素,但不是元素的子節點 (單向關係)
- 命名空間節點 (Namespace Nodes):元素宣告的命名空間,特性類似屬性節點
- 處理指令節點 (Processing Instruction Nodes):如
<?xml version="1.0"?>
- 註解節點 (Comment Nodes):
<!-- 註解 -->
範例 XML 文件樹
<A id="a1">
<B id="b1">
<C id="c1">
<B name="b"/>
<D id="d1"/>
<E id="e1"/>
<E id="e2"/>
</C>
</B>
<B id="b2"/>
<C id="c2">
<B/>
<D id="d2"/>
<F/>
</C>
<E/>
</A>
五大匹配方法詳解
1. 路徑匹配
| 語法 | 意義 | 範例結果 |
/A/C/D | 絕對路徑:A→C→D | id=d2 的 D 節點 |
//E | 所有 E 元素 (任意深度) | 三個 E 節點 |
//C/E | 父節點為 C 的所有 E | id=e1, e2 的兩個 E |
/A/B/C/* | C 下所有子元素 | B(name=b), D(d1), E(e1), E(e2) |
/*/*/D | 深度 2 的所有 D | id=d2 的 D |
2. 位置匹配
/A/B/C[1] // C 的第一個子元素 → B(name=b)
/A/B/C[last()] // C 的最後一個子元素 → E(id=e2)
/A/B/C[position()>1] // C 位置>1 的子元素 → D(d1), E(e1), E(e2)
3. 屬性與屬性值匹配
//B[@id] // 所有有 id 屬性的 B → b1, b2
//B[@*] // 所有有任意屬性的 B → b1, b2, B(name=b)
//B[not(@*)] // 無屬性的 B → C 下的 B
//B[@id="b1"] // id 等於 b1 的 B → A 下的 B
4. 親屬關係匹配 (Axes)
| 軸 | 範例 | 結果 |
| parent | //E/parent::* | A(id=a1), C(id=c1) |
| ancestor | //F/ancestor::* | A(id=a1), C(id=c2) |
| child | /A/child::* | B(b1), B(b2), C(c2), E(無屬性) |
| descendant | /A/descendant::* | 除 A 外所有節點 |
| self | //F/self::* | F 本身 |
| ancestor-or-self | //F/ancestor-or-self::* | F, C(c2), A(a1) |
| descendant-or-self | /A/C/descendant-or-self::* | C(c2), 其子 B, D, F |
| following-sibling | /A/C/following-sibling::* | E(無屬性) |
| preceding-sibling | /A/C/preceding-sibling::* | B(b1), B(b2) |
| following | /A/B/C/following::* | 文件順序在 C 之後的所有節點 |
| preceding | /A/C/preceding::* | 文件順序在 C 之前的所有節點 |
5. 條件匹配 (Predicate + Functions)
在 [...] 中使用函式運算布林值:
- 節點函式:
last(), position(), count(), name()
- 字串函式:
contains(), starts-with(), substring()
- 數值函式:
sum(), floor(), round()
- 布林函式:
not(), true(), false(), lang()
範例://B[@id and position()=1] 選取第一個有 id 的 B。
官方參考文件
MSDN: XPath Reference (System.Xml.XPath)