Requêtes et espaces de noms XPath
Les requêtes XPath reconnaissent les espaces de noms d’un document XML et peuvent utiliser les préfixes d’espace de noms pour qualifier des noms d’éléments et d’attributs. Le fait de qualifier des noms d’éléments et d’attributs avec un préfixe d’espace de noms permet de limiter les nœuds retournés par une requête XPath aux nœuds qui appartiennent à un espace de noms spécifique.
Par exemple, si le préfixe books
correspond à l’espace de noms http://www.contoso.com/books
, la requête XPath suivante /books:books/books:book
sélectionne uniquement les éléments book
se trouvant dans l’espace de noms http://www.contoso.com/books
.
La classe XmlNamespaceManager
Pour qu'il soit possible d'utiliser des espaces de noms dans une requête XPath, un objet dérivé de l'interface IXmlNamespaceResolver comme la classe XmlNamespaceManager est construit avec l'URI d'espace de noms et le préfixe à utiliser dans la requête XPath.
L'objet XmlNamespaceManager peut être utilisé dans la requête de chacune des manières suivantes.
L'objet XmlNamespaceManager est associé à un objet XPathExpression existant en utilisant la méthode SetContext de l'objet XPathExpression. Vous pouvez aussi compiler un nouvel objet XPathExpression à l'aide de la méthode Compile statique, qui prend comme paramètres une chaîne représentant l'expression XPath ainsi qu'un objet XmlNamespaceManager et retourne un nouvel objet XPathExpression.
L’objet XmlNamespaceManager lui-même est passé en paramètre à une méthode réceptrice de la classe XPathNavigator en même temps qu’une chaîne représentant l’expression XPath.
Voici les méthodes de la classe XPathNavigator qui acceptent comme paramètre un objet dérivé de l'interface IXmlNamespaceResolver.
L'espace de noms par défaut
Dans le document XML suivant, l'espace de noms par défaut, avec un préfixe vide, est utilisé pour déclarer l'espace de noms http://www.contoso.com/books
.
<books xmlns="http://www.contoso.com/books">
<book>
<title>Title</title>
<author>Author Name</author>
<price>5.50</price>
</book>
</books>
XPath traite le préfixe vide comme l’espace de noms null
. Autrement dit, seuls les préfixes mappés à des espaces de noms peuvent être utilisés dans des requêtes XPath. Cela signifie que si vous voulez appliquer une requête à un espace de noms d'un document XML, vous devez définir un préfixe pour cet espace de noms, même si c'est l'espace de noms par défaut.
Par exemple, si aucun préfixe n’est défini pour le document XML ci-dessus, la requête XPath /books/book
ne retournera aucun résultat.
Un préfixe doit être lié afin d'éviter toute ambiguïté lors de l'interrogation de documents où certains nœuds ne sont pas dans un espace de noms et certains se trouvent dans un espace de noms par défaut.
Le code suivant définit un préfixe pour l'espace de noms par défaut et sélectionne tous les éléments book
de l'espace de noms http://www.contoso.com/books
.
Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
Dim query As XPathExpression = navigator.Compile("/books:books/books:book")
Dim manager As XmlNamespaceManager = New XmlNamespaceManager(navigator.NameTable)
manager.AddNamespace("books", "http://www.contoso.com/books")
query.SetContext(manager)
Dim nodes As XPathNodeIterator = navigator.Select(query)
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();
XPathExpression query = navigator.Compile("/books:books/books:book");
XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);
manager.AddNamespace("books", "http://www.contoso.com/books");
query.SetContext(manager);
XPathNodeIterator nodes = navigator.Select(query);
Voir aussi
- XmlDocument
- XPathDocument
- XPathNavigator
- Traitement des données XML à l’aide du modèle de données XPath
- Sélection de données XML à l'aide de XPathNavigator
- Évaluation d’expressions XPath à l’aide de XPathNavigator
- Mise en correspondance de nœuds avec XPathNavigator
- Types de nœuds reconnus avec les requêtes XPath
- Expressions XPath compilées