使用 XPathNavigator 的屬性及命名空間節點巡覽
更新: November 2007
XPathNavigator 類別提供兩組巡覽方法,第一組 (可在 使用 XPathNavigator 的節點集巡覽 主題中找到) 用於巡覽 XPathDocument 或 XmlDocument 物件中的節點集。第二組 (在本主題中說明) 用於巡覽 XPathDocument 或 XmlDocument 物件中的屬性及命名空間節點。
屬性節點巡覽
屬性 (Attribute) 是項目的屬性 (Property),而不是項目的子系。這個差別是很重要的,因為這關係到用來巡覽同層級節點、父節點及子節點之 XPathNavigator 類別的方法。
例如,MoveToPrevious 及 MoveToNext 方法無法用來從項目巡覽到屬性,或在屬性之間巡覽。應改用不同的方法來巡覽屬性。
以下是 XPathNavigator 類別的屬性巡覽方法。
當目前的節點為項目時,您可以使用 HasAttributes 屬性 (Property),來查看是否有與項目相關的屬性 (Attribute)。一旦知道項目有屬性,就有多種存取屬性的方法。若要從項目擷取單一屬性,請使用 GetAttribute 方法。若要將 XPathNavigator 移至特定的屬性,請使用 MoveToAttribute 方法。您還可以重複處理項目的每個屬性,方法是使用 MoveToFirstAttribute 方法,然後多次呼叫 MoveToNextAttribute 方法。
注意事項: |
---|
當 XPathNavigator 物件定位於屬性或命名空間節點上時,MoveToChild、MoveToFirst、MoveToFirstChild、MoveToFollowing、MoveToId、MoveToNext 和 MoveToPrevious 方法一律會傳回 false,且對 XPathNavigator 的位置毫無影響。MoveTo、MoveToParent 及 MoveToRoot 方法則例外。 |
命名空間節點巡覽
每個項目都有一組相關聯的命名空間節點,一個用於每個與此項目範圍內命名空間 URI 繫結的個別命名空間前置詞 (包括繫結至 http://www.w3.org/XML/1998/namespace 命名空間的 XML 前置詞,其在每個 XML 文件中隱含宣告),另一個用於預設命名空間 (若命名空間節點位於此項目的範圍內)。此項目為上述每個命名空間節點的父代;但命名空間節點並非其父項目的子系。
與屬性一樣,MoveToPrevious 及 MoveToNext 方法無法用來從項目巡覽到命名空間節點,或在命名空間節點之間巡覽。而是命名空間節點具有不同的巡覽方法。
以下是 XPathNavigator 類別的命名空間巡覽方法。
在 XML 文件中,任何項目的範圍內總是至少有一個命名空間節點。此命名空間節點具有前置詞 xml 及命名空間 URI http://www.w3.org/XML/1998/namespace。若要在給定特定前置詞的情況下,擷取範圍內的命名空間 URI,請使用 GetNamespace 方法。若要將 XPathNavigator 物件移至特定的命名空間節點,請使用 MoveToNamespace 方法。您還可以重複處理項目範圍內的每個命名空間節點,方法是使用 MoveToFirstNamespace 方法,然後多次呼叫 MoveToNextNamespace 方法。
注意事項: |
---|
當 XPathNavigator 物件定位於屬性或命名空間節點上時,MoveToChild、MoveToFirst、MoveToFirstChild、MoveToFollowing、MoveToId、MoveToNext 和 MoveToPrevious 方法一律會傳回 false,且對 XPathNavigator 的位置毫無影響。MoveTo、MoveToParent 及 MoveToRoot 方法則例外。 |
XPathNamespaceScope 列舉型別
巡覽命名空間節點時,可使用 XPathNamespaceScope 參數呼叫 MoveToFirstNamespace 及 MoveToNextNamespace 方法。這些方法的行為模式,與其不使用參數呼叫的對應方法不同。XPathNamespaceScope 列舉型別具有值 All、ExcludeXml 或 Local。
下列範例顯示在 XML 文件的不同範圍由 MoveToFirstNamespace 及 MoveToNextNamespace 方法傳回的命名空間。
<root>
<element1 xmlns="https://www.contoso.com" xmlns:books="https://www.contoso.com/books">
<element2 />
</element1>
</root>
命名空間序列 (在呼叫 MoveToFirstNamespace 方法,然後對 MoveToNextNamespace 方法進行一系列呼叫之後,XPathNavigator 所在的命名空間) 如下所示。
當定位於 element2 上時:xmlns:books="https://www.contoso.com/books"、xmlns="https://www.contoso.com" 及 xmlns:xml="http://www.w3.org/XML/1998/namespace"。
當定位於 element1 上時:xmlns:books="https://www.contoso.com/books"、xmlns="https://www.contoso.com" 及 xmlns:xml="http://www.w3.org/XML/1998/namespace"。
當定位於 root 上時:xmlns:xml="http://www.w3.org/XML/1998/namespace".
注意事項: |
---|
XPathNavigator 類別會以反向的文件順序傳回命名空間節點。因此,MoveToFirstNamespace 實際上會移至目前範圍中的最後一個命名空間節點。 |
下列範例顯示在 XML 文件的不同範圍指定了 XPathNamespaceScope 列舉型別時,由 MoveToFirstNamespace 及 MoveToNextNamespace 方法傳回的命名空間。
<root xmlns="https://www.contoso.com" xmlns:a="https://www.contoso.com/a" xmlns:b="https://www.contoso.com/b">
<child1 xmlns:a="urn:a">
<child2 xmlns:c="urn:c" />
</child1>
</root>
當定位於 child2 時,命名空間序列 (在呼叫 MoveToFirstNamespace 方法,然後對 MoveToNextNamespace 方法進行一系列呼叫之後,XPathNavigator 所在的命名空間) 如下所示。
All:xmlns:c="urn:c"、xmlns:a="urn:a"、、xmlns:b="https://www.contoso.com/b"、xmlns:a="https://www.contoso.com/a"、xmlns="https://www.contoso.com" 及 xmlns:xml="http://www.w3.org/XML/1998/namespace"。
ExcludeXml:xmlns:c="urn:c"、xmlns:a="urn:a"、、xmlns:b="https://www.contoso.com/b"、xmlns:a="https://www.contoso.com/a" 及 xmlns="https://www.contoso.com"。
Local: xmlns:c="urn:c".
注意事項: |
---|
XPathNavigator 類別會以反向的文件順序傳回命名空間節點。因此,MoveToFirstNamespace 實際上會移至目前範圍中的最後一個命名空間節點。 |
請參閱
概念
使用 XPathNavigator 存取強型別 XML 資料