Partager via


Gestion des espaces de noms à l'aide de XmlNamespaceManager

La classe XmlNamespaceManager contient une collection d'URI d'espace de noms et leurs préfixes. Elle permet de résoudre, ajouter et supprimer des espaces de noms à partir d'une collection. Dans certains contextes, elle est indispensable pour améliorer les performances de traitement XML. Par exemple, le XmlNamespaceManager est utilisé par la classe XsltContext pour la prise en charge de XPath. Pour plus d'informations sur la classe XsltContext, consultez l'article Q324899 de la Base de connaissances Microsoft intitulé PROCÉDURE : implémentation et utilisation des fonctions d'extension personnalisées lors de l'exécution de requêtes XPath dans Visual Basic .NET (en anglais).

Pour obtenir le même exemple en C#, consultez l'article Q324462 de la Base de connaissances Microsoft intitulé PROCÉDURE : implémentation et utilisation des fonctions d'extension personnalisées lors de l'exécution de requêtes XPath dans Visual C# .NET (en anglais).

RemarqueRemarque

Si vous utilisez LINQ to XML, le XmlNamespaceManager n'est pas utilisé pour gérer les espaces de noms.Pour des informations sur la gestion des espaces de noms lors de l'utilisation de LINQ to XML, consultez Utilisation des espaces de noms XML.

Espaces de noms

Quand un gestionnaire d'espaces de noms est créé, trois préfixes sont ajoutés automatiquement à la classe. Le tableau suivant répertorie ces trois préfixes et les espaces de noms qu'ils représentent.

Préfixe

Namespace

xmlns

http://www.w3.org/2000/xmlns/

xml

http://www.w3.org/XML/1998/namespace

String.Empty

Espace de noms vide. Cette valeur peut être assignée à un préfixe. Par exemple, définit l'espace de noms par défaut comme l'espace de noms vide.

Pour ajouter des espaces de noms au gestionnaire d'espaces de noms, créez un gestionnaire d'espaces de noms, puis utilisez la méthode AddNamespace. Lors de la création du gestionnaire d'espaces de noms, vous pouvez utiliser le NameTable des classes XmlTextReader, XsltContext ou XmlDocument. Un objet XmlNamespaceManager personnalisé est créé et rempli avec les déclarations d'espaces de noms appropriées à l'aide de la méthode AddNamespace. Le XmlNamespaceManager est fourni comme paramètre des méthodes SelectNodes ou SelectSingleNode de la classe XmlDocument pour exécuter des expressions de requête XPath qui font référence à des noms d'élément et d'attribut qualifiés par un espace de noms. Divers points sont présupposés lors de l'ajout d'espaces de noms :

  • Les préfixes et les espaces de noms ont déjà été vérifiés et ils sont conformes à la spécification du W3C sur les espaces de noms. Le gestionnaire d'espaces de noms n'effectue aucune validation sur l'espace de noms.

  • Le gestionnaire d'espaces de noms atomise les chaînes lorsqu'elles sont ajoutées à l'aide de la méthode AddNamespace.

  • Le gestionnaire d'espaces de noms atomise les chaînes lorsqu'une recherche est effectuée à l'aide de la méthode LookupNamespace ou LookupPrefix.

  • Des paires espace de noms/préfixe par défaut sont automatiquement ajoutées au gestionnaire d'espaces de noms au moment de la création.

En plus d'ajouter et d'extraire les espaces de noms, le gestionnaire d'espaces de noms implémente la prise en charge de l'énumération. Vous pouvez itérer sur les informations enregistrées dans le gestionnaire d'espaces de noms à l'aide de la construction foreach. Prenons l'exemple d'un gestionnaire d'espaces de noms créé sous le nom nsmanager, vous pouvez itérer sur la table à l'aide de foreach (String prefix in nsmanager).

Parce que le gestionnaire d'espaces de noms assure une comparaison de chaînes avec le préfixe et les espaces de noms en tant qu'objets, son utilisation sur une comparaison directe d'une chaîne améliore les performances.

Pour ajouter un espace de noms au gestionnaire d'espaces de noms, utilisez la méthode AddNamespace. L'exemple de code suivant montre comment lier le préfixe xsd à l'URI d'espace de noms de http://www.w3.org/2001/XMLSchema :

nsmgr.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema")
nsmgr.AddNamespace("xsd", "http://www.w3.org/2001/XMLSchema");

Exemple

L'exemple de code suivant montre comment trouver ensuite l'espace de noms à l'aide de la méthode LookupNamespace :

nsmgr.LookupNamespace("xsd")
nsmgr.LookupNamespace("xsd");

Un exemple exhaustif d'ajout et d'extraction d'espaces de noms est fourni au niveau de la méthode LookupNamespace.

L'exemple suivant crée un XmlNamespaceManager à l'aide de la NameTable à partir d'un lecteur.

Dim reader As New XmlTextReader("myfile.xml")
Dim nsmanager As New XmlNamespaceManager(reader.NameTable)
nsmanager.AddNamespace("msbooks", "www.microsoft.com/books")
nsmanager.PushScope()
nsmanager.AddNamespace("msstore", "www.microsoft.com/store")
While reader.Read()
    Console.WriteLine("Reader Prefix:{0}", reader.Prefix)
    Console.WriteLine("XmlNamespaceManager Prefix:{0}",
     nsmanager.LookupPrefix(nsmanager.NameTable.Get(reader.NamespaceURI)))
End While
XmlTextReader reader = new XmlTextReader("myfile.xml");
XmlNamespaceManager nsmanager = new XmlNamespaceManager(reader.NameTable);
nsmanager.AddNamespace("msbooks", "www.microsoft.com/books");
nsmanager.PushScope();
nsmanager.AddNamespace("msstore", "www.microsoft.com/store");
while (reader.Read())
{
    Console.WriteLine("Reader Prefix:{0}", reader.Prefix);
    Console.WriteLine("XmlNamespaceManager Prefix:{0}",
    nsmanager.LookupPrefix(nsmanager.NameTable.Get(reader.NamespaceURI)));
}

Voir aussi

Concepts

Espaces de noms dans un document XML