使用 XPathNavigator 的属性和命名空间节点定位
更新:November 2007
XPathNavigator 类提供两组浏览方法,第一组(在 使用 XPathNavigator 的节点集定位 主题中介绍)用于浏览 XPathDocument 或 XmlDocument 对象中的节点集。 第二组(在本主题中介绍)用于浏览 XPathDocument 或 XmlDocument 对象中的属性和命名空间节点。
浏览属性节点
属性是元素的属性,不是元素的子级。 这一区别很重要,因为用来浏览同辈节点、父节点和子节点的 XPathNavigator 类的方法不同。
例如,MoveToPrevious 和 MoveToNext 方法不用来从元素浏览到属性或在属性间浏览。 属性采用不同的浏览方法。
以下是 XPathNavigator 类的属性浏览方法。
当当前节点是元素时,可以使用 HasAttributes 方法查看是否存在任何与此元素关联的属性。 如果已知元素具有属性,有多种方法可以访问这些属性。 要从元素中检索单个属性,请使用 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 枚举
在浏览命名空间节点时,MoveToFirstNamespace 和 MoveToNextNamespace 方法可以使用 XPathNamespaceScope 参数调用。 这些方法的行为与未使用任何参数调用的对应方法不同。 XPathNamespaceScope 枚举包含值 All、ExcludeXml 或 Local。
下列示例显示 MoveToFirstNamespace 和 MoveToNextNamespace 方法在 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".。 xmlns:xml="http://www.w3.org/XML/1998/namespace".
说明: |
---|
XPathNavigator 类以相反的文档顺序返回命名空间节点。 因此,MoveToFirstNamespace 实质上移到当前在范围内的最后一个命名空间节点。 |
下列示例显示 MoveToFirstNamespace 和 MoveToNextNamespace 方法使用在 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 实质上移到当前在范围内的最后一个命名空间节点。 |
请参见
概念
使用 XPathNavigator 访问强类型 XML 数据