使用 XPathNavigator 的属性和命名空间节点定位

XPathNavigator类提供两组导航方法,第一套方法在使用 XPathNavigator 进行节点集导航主题中找到,用于在XPathDocument对象中导航XmlDocument。 第二组集合,本主题中描述的,用于在XPathDocument对象中导航XmlDocument

浏览属性节点

属性是元素的属性,而不是元素的子元素。 这一区别很重要,因为用于导航同级节点、父节点和子节点的 XPathNavigator 类的方法。

例如, MoveToPreviousMoveToNext 方法不用于从元素导航到属性或在属性之间导航。 相反,属性具有不同的导航方法。

以下是类的属性导航方法 XPathNavigator

当当前节点是一个元素时,可以使用 HasAttributes 该属性来查看是否存在与该元素关联的任何属性。 已知元素具有属性后,有多种方法可用于访问属性。 若要从元素中检索单个属性,请使用 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

以下示例展示了MoveToFirstNamespaceMoveToNextNamespace方法在 XML 文档的不同范围中返回的命名空间。

<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"

  • Localxmlns:c="urn:c"

注释

XPathNavigator 类按反向文档顺序返回命名空间节点。 因此, MoveToFirstNamespace 实质上移动到当前作用域中的最后一个命名空间节点。

另请参阅