Navigation entre les nœuds d'attribut et d'espace de noms à l'aide de XPathNavigator
La classe XPathNavigator fournit deux ensembles de méthodes de navigation. Le premier, trouvé dans la rubrique Navigation dans la collection de nœuds à l’aide de XPathNavigator, permet de naviguer entre les collections de nœuds d'un objet XPathDocument ou XmlDocument. Le second, décrit dans cette rubrique, permet de naviguer entre les nœuds d'attribut et d'espace de noms d'un objet XPathDocument ou XmlDocument.
Navigation entre les nœuds d'attribut
Les attributs sont des propriétés d'un élément, pas des enfants d'un élément. La distinction est importante étant donné que les méthodes de la classe XPathNavigator permettent de naviguer entre les nœuds frères, parents et enfants.
Par exemple, les méthodes MoveToPrevious et MoveToNext ne permettent pas de naviguer d'un élément à un attribut ou entre des attributs. Par contre, les attributs possèdent des méthodes de navigation distinctes.
Voici les méthodes de navigation entre attributs de la classe XPathNavigator.
Si le nœud actuel est un élément, vous pouvez utiliser la propriété HasAttributes pour vérifier si des attributs sont associés à l'élément. Une fois que vous savez qu'un élément possède des attributs, il existe plusieurs méthodes permettant d'accéder à ces attributs. Pour extraire un seul attribut de l'élément, utilisez la méthode GetAttribute. Pour déplacer XPathNavigator vers un attribut particulier, utilisez la méthode MoveToAttribute. Vous pouvez également itérer sur chaque attribut d'un élément à l'aide de la méthode MoveToFirstAttribute, suivie par plusieurs appels à la méthode MoveToNextAttribute.
Notes
Lorsque XPathNavigator se trouve sur un nœud d'attribut ou d'espace de noms, les méthodes MoveToChild, MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToId, MoveToNext et MoveToPrevious retournent toujours false
et n'ont pas d'effet sur la position de XPathNavigator. Les méthodes MoveTo, MoveToParent et MoveToRoot font office d'exceptions.
Navigation entre les nœuds d'espace de noms
Chaque élément est associé à une collection de nœuds d'espace de noms, un pour chaque préfixe d'espace de noms lié à un URI d'espace de noms dans la portée de l'élément (notamment le préfixe XML lié à l'espace de noms http://www.w3.org/XML/1998/namespace
, qui est déclaré de manière implicite dans chaque document XML) et un pour l'espace de noms par défaut s'il en existe un dans la portée de l'élément. L'élément est le parent de chacun de ces nœuds d'espace de noms ; toutefois, un nœud d'espace de noms n'est pas un enfant de ses éléments parents.
Comme pour les attributs, les méthodes MoveToPrevious et MoveToNext ne permettent pas de naviguer d'un nœud d'élément à un nœuds d'espace de noms ou entre des nœuds d'espace de noms. Par contre, les nœuds d'espace de noms possèdent des méthodes de navigation distinctes.
Voici les méthodes de navigation entre espaces de noms de la classe XPathNavigator.
Il existe toujours au moins un nœud d'espace de noms dans la portée d'un élément dans un document XML. Il s'agit du nœud d'espace de noms avec le préfixe xml
et l'URI d'espace de noms http://www.w3.org/XML/1998/namespace
. Pour extraire un URI d'espace de noms dans la portée d'un préfixe donné, utilisez la méthode GetNamespace. Pour déplacer l'objet XPathNavigator vers un nœud d'espace de noms particulier, utilisez la méthode MoveToNamespace. Vous pouvez également itérer sur chaque nœud d'espace de noms dans la portée d'un élément à l'aide de la méthode MoveToFirstNamespace, suivie par plusieurs appels à la méthode MoveToNextNamespace.
Notes
Lorsque XPathNavigator se trouve sur un nœud d'attribut ou d'espace de noms, les méthodes MoveToChild, MoveToFirst, MoveToFirstChild, MoveToFollowing, MoveToId, MoveToNext et MoveToPrevious retournent toujours false
et n'ont pas d'effet sur la position de XPathNavigator. Les méthodes MoveTo, MoveToParent et MoveToRoot font office d'exceptions.
Énumération XPathNamespaceScope
Lors de la navigation entre les nœuds d'espace de noms, il est possible d'appeler les méthodes MoveToFirstNamespace et MoveToNextNamespace à l'aide d'un paramètre XPathNamespaceScope. Ces méthodes se comportent différemment de leurs équivalents appelés sans paramètre. L'énumération XPathNamespaceScope a des valeurs de All, ExcludeXml ou Local.
Les exemples suivants indiquent les espaces de noms qui sont retournés par les méthodes MoveToFirstNamespace et MoveToNextNamespace dans différentes portées d'un document XML.
<root>
<element1 xmlns="http://www.contoso.com" xmlns:books="http://www.contoso.com/books">
<element2 />
</element1>
</root>
La séquence d'espaces de noms (l'espace de noms sur lequel l'objet XPathNavigator est positionné après un appel à la méthode MoveToFirstNamespace, suivi d'une série d'appels à la méthode MoveToNextNamespace) est la suivante.
Lorsqu'il est positionné sur
element2
:xmlns:books="http://www.contoso.com/books"
,xmlns="http://www.contoso.com"
etxmlns:xml="http://www.w3.org/XML/1998/namespace"
.Lorsqu'il est positionné sur
element1
:xmlns:books="http://www.contoso.com/books"
,xmlns="http://www.contoso.com"
etxmlns:xml="http://www.w3.org/XML/1998/namespace"
.Lorsqu'il est positionné sur
root
:xmlns:xml="http://www.w3.org/XML/1998/namespace".
Notes
la classe XPathNavigator retourne des nœuds d'espace de noms dans l'ordre inverse du document. Par conséquent, la méthode MoveToFirstNamespace se déplace essentiellement vers le dernier nœud d'espace de noms de la portée actuelle.
Les exemples suivants indiquent les espaces de noms qui sont retournés par les méthodes MoveToFirstNamespace et MoveToNextNamespace avec l'énumération XPathNamespaceScope spécifiée dans différentes portées d'un document XML.
<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>
Lorsqu'elle se trouve sur child2
, la séquence d'espaces de noms (l'espace de noms sur lequel l'objet XPathNavigator est positionné après un appel à la méthode MoveToFirstNamespace, suivi d'une série d'appels à la méthode MoveToNextNamespace) est la suivante.
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"
etxmlns: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"
etxmlns="http://www.contoso.com"
.Local:
xmlns:c="urn:c"
.
Notes
la classe XPathNavigator retourne des nœuds d'espace de noms dans l'ordre inverse du document. Par conséquent, la méthode MoveToFirstNamespace se déplace essentiellement vers le dernier nœud d'espace de noms de la portée actuelle.