该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和MoveToParentMoveToRoot方法。
浏览命名空间节点
每个元素都有一组关联的命名空间节点,一个用于绑定到元素范围内命名空间 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和MoveToParentMoveToRoot方法。
XPathNamespaceScope 枚举
导航命名空间节点时,可以使用MoveToFirstNamespace参数调用MoveToNextNamespace和XPathNamespaceScope方法。 这些方法的行为方式与不带参数的对应方法的行为不同。 XPathNamespaceScope枚举的值为All,ExcludeXml或 Local。
以下示例展示了MoveToFirstNamespace和MoveToNextNamespace方法在 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 枚举时,MoveToNextNamespace 和 XPathNamespaceScope 方法所返回的命名空间。
<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 所处的命名空间)如下所示。
All:
xmlns: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"
。ExcludeXml:
xmlns: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 实质上移动到当前作用域中的最后一个命名空间节点。