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

XPathNavigator 类提供两组浏览方法,第一组(在 使用 XPathNavigator 的节点集定位 主题中介绍)用于浏览 XPathDocumentXmlDocument 对象中的节点集。第二组(在本主题中介绍)用于浏览 XPathDocumentXmlDocument 对象中的属性和命名空间节点

浏览属性节点

属性是元素的属性,不是元素的子级。这一区别很重要,因为用来浏览同级节点、父节点和子节点的 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 枚举

在浏览命名空间节点时,MoveToFirstNamespaceMoveToNextNamespace 方法可以使用 XPathNamespaceScope 参数调用。这些方法的行为与未使用任何参数调用的对应方法不同。XPathNamespaceScope 枚举包含值 AllExcludeXmlLocal

下列示例显示 MoveToFirstNamespaceMoveToNextNamespace 方法在 XML 文档中的不同范围内返回的命名空间。

<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 实质上移到当前在范围内的最后一个命名空间节点。

下列示例显示 MoveToFirstNamespaceMoveToNextNamespace 方法使用在 XML 文档中的不同范围内指定的 XPathNamespaceScope 枚举返回的命名空间。

<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 实质上移到当前在范围内的最后一个命名空间节点。

请参见

参考

XmlDocument

XPathDocument

XPathNavigator

概念

使用 XPath 数据模型处理 XML 数据

使用 XPathNavigator 的节点集定位

使用 XPathNavigator 提取 XML 数据

使用 XPathNavigator 访问强类型 XML 数据