共用方式為


使用 XPathNavigator 巡覽屬性及命名空間節點

XPathNavigator 類別提供兩組巡覽方法,第一組 (可在使用 XPathNavigator 巡覽節點集主題中找到) 用於巡覽 XPathDocumentXmlDocument 物件中的節點集。 第二組 (在本主題中說明) 用於巡覽 XPathDocumentXmlDocument 物件中的「屬性及命名空間節點」

屬性節點巡覽

屬性 (Attribute) 是項目的屬性 (Property),而不是項目的子系。 這個差別是很重要的,因為這關係到用來巡覽同層級節點、父節點及子節點之 XPathNavigator 類別的方法。

例如,MoveToPreviousMoveToNext 方法無法用來從項目巡覽到屬性,或在屬性之間巡覽。 應改用不同的方法來巡覽屬性。

以下是 XPathNavigator 類別的屬性巡覽方法。

當目前的節點為項目時,您可以使用 HasAttributes 屬性 (Property),來查看是否有與項目相關的屬性 (Attribute)。 一旦知道項目有屬性,就有多種存取屬性的方法。 若要從項目擷取單一屬性,請使用 GetAttribute 方法。 若要將 XPathNavigator 移至特定的屬性,請使用 MoveToAttribute 方法。 您還可以重複處理項目的每個屬性,方法是使用 MoveToFirstAttribute 方法,然後多次呼叫 MoveToNextAttribute 方法。

注意

XPathNavigator 物件定位於屬性或命名空間節點上時,MoveToChildMoveToFirstMoveToFirstChildMoveToFollowingMoveToIdMoveToNextMoveToPrevious 方法一律會傳回 false,且對 XPathNavigator 的位置毫無影響。 MoveToMoveToParentMoveToRoot 方法則例外。

命名空間節點巡覽

每個項目都有一組相關聯的命名空間節點,一個用於每個與此項目範圍內命名空間 URI 繫結的個別命名空間前置詞 (包括繫結至 http://www.w3.org/XML/1998/namespace 命名空間的 XML 前置詞,其在每個 XML 文件中隱含宣告),另一個用於預設命名空間 (若命名空間節點位於此項目的範圍內)。 此項目為上述每個命名空間節點的父代;但命名空間節點並非其父項目的子系。

與屬性一樣,MoveToPreviousMoveToNext 方法無法用來從項目巡覽到命名空間節點,或在命名空間節點之間巡覽。 而是命名空間節點具有不同的巡覽方法。

以下是 XPathNavigator 類別的命名空間巡覽方法。

在 XML 文件中,任何項目的範圍內總是至少有一個命名空間節點。 此命名空間節點具有前置詞 xml 及命名空間 URI http://www.w3.org/XML/1998/namespace。 若要在給定特定前置詞的情況下,擷取範圍內的命名空間 URI,請使用 GetNamespace 方法。 若要將 XPathNavigator 物件移至特定的命名空間節點,請使用 MoveToNamespace 方法。 您還可以重複處理項目範圍內的每個命名空間節點,方法是使用 MoveToFirstNamespace 方法,然後多次呼叫 MoveToNextNamespace 方法。

注意

XPathNavigator 物件定位於屬性或命名空間節點上時,MoveToChildMoveToFirstMoveToFirstChildMoveToFollowingMoveToIdMoveToNextMoveToPrevious 方法一律會傳回 false,且對 XPathNavigator 的位置毫無影響。 MoveToMoveToParentMoveToRoot 方法則例外。

XPathNamespaceScope 列舉型別

巡覽命名空間節點時,可使用 MoveToFirstNamespace 參數呼叫 MoveToNextNamespaceXPathNamespaceScope 方法。 這些方法的行為模式,與其不使用參數呼叫的對應方法不同。 XPathNamespaceScope 列舉型別具有值 AllExcludeXmlLocal

下列範例顯示在 XML 文件的不同範圍由 MoveToFirstNamespaceMoveToNextNamespace 方法傳回的命名空間。

<root>  
    <element1 xmlns="http://www.contoso.com" xmlns:books="http://www.contoso.com/books">  
        <element2 />  
    </element1>  
</root>  

命名空間序列 (在呼叫 XPathNavigator 方法,然後對 MoveToFirstNamespace 方法進行一系列呼叫之後,MoveToNextNamespace 所在的命名空間) 如下所示。

  • 當定位於 element2 上時:xmlns:books="http://www.contoso.com/books", xmlns="http://www.contoso.com"xmlns:xml="http://www.w3.org/XML/1998/namespace"

  • 當定位於 element1 上時:xmlns:books="http://www.contoso.com/books", xmlns="http://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 文件的不同範圍指定了 MoveToFirstNamespace 列舉型別時,由 MoveToNextNamespaceXPathNamespaceScope 方法傳回的命名空間。

<root xmlns="http://www.contoso.com" xmlns:a="http://www.contoso.com/a" xmlns:b="http://www.contoso.com/b">  
    <child1 xmlns="" xmlns:a="urn:a">  
        <child2 xmlns:c="urn:c" />  
    </child1>  
</root>  

當定位於 child2 時,命名空間序列 (在呼叫 XPathNavigator 方法,然後對 MoveToFirstNamespace 方法進行一系列呼叫之後,MoveToNextNamespace 所在的命名空間) 如下所示。

  • Allxmlns:c="urn:c"xmlns:a="urn:a"xmlns=""xmlns:b="http://www.contoso.com/b"xmlns:a="http://www.contoso.com/a"xmlns="http://www.contoso.com"xmlns:xml="http://www.w3.org/XML/1998/namespace"

  • ExcludeXmlxmlns:c="urn:c"xmlns:a="urn:a"xmlns=""xmlns:b="http://www.contoso.com/b"xmlns:a="http://www.contoso.com/a"xmlns="http://www.contoso.com"

  • Local: xmlns:c="urn:c".

注意

XPathNavigator 類別會以反向的文件順序傳回命名空間節點。 因此,MoveToFirstNamespace 實際上會移至目前範圍中的最後一個命名空間節點。

另請參閱