名稱測試
名稱測試是最常使用的節點測試形式,因為它可讓您明確地為要選取的節點指定名稱。但僅指定節點的名稱並不足以自動選取適當的節點,因為文件樹狀結構中可能有不同的節點型別使用相同的名稱。若要選取適當的節點,名稱測試只會選取名稱符合指定名稱、且節點型別符合指定座標軸之主要節點型別的節點。
下表列出各種座標軸的主要節點型別。
座標軸 |
主要節點型別 |
---|---|
attribute:: 軸或 namespace:: 軸以外所有其他的座標軸 (也就是可包含項目的座標軸) |
element |
attribute |
attribute |
namespace |
namespace |
在名稱測試中指定的名稱可以是三種型別的其中一種:星號(*)、QName,或運算式 NCName:*。下表提供範例以說明這些名稱型別如何與指定的座標軸搭配運作,以尋找特定的節點集。
名稱 |
傳回 |
範例 |
---|---|---|
* (星號) |
適用於主要節點型別的任何節點。 |
ancestor::* 會選取內容節點的所有祖系。 attribute::* 會選取內容節點的所有屬性。 namespace::* 會選取內容節點的所有命名空間。 |
QName |
適用於展開名稱與 QName 指定之展開名稱相同的任何主要型別節點。 |
child::para 會選取屬於內容節點子系的所有 <para> 項目節點。若內容節點沒有 <para> 子系,則會選取空的節點集。 |
NCName:* |
適用於展開名稱具有命名空間 URI (NCName 亦展開為此 URI) 的任何主要型別節點。 |
child::ns:* 會選取命名空間中,具有 ns 前置詞的所有子項目節點。 |
備註
當節點測試為 QName 時,XPath 必須先根據 XML 檔案中的內容命名空間宣告展開 QName。這項展開的程序與開始與結束標記中之項目名稱的展開程序相同,差別在於,它不會使用以 xmlns 宣告的預設命名空間。若 QName 沒有前置詞,XPath 會尋找本機名稱符合指定 QName、且其命名空間 URI 為 Null 的節點。若 QName 的前置詞並未對應檔案中的任何內容命名空間宣告,則 QName 會造成錯誤。
當節點測試為 NCName:* 時,XPath 就會展開 NCName,使用的方式與它展開 QName 的前置詞時相同。同樣地,若 NCName 部分並未對應檔案中的內容命名空間宣告所含的任何前置詞,NCName:* 就會造成錯誤。