Votre problème de base pour récupérer des espaces de noms à partir d'un document Xml peut être résolu simplement en récupérant le NameTable
du XmlDocument et en en créant un XmlNameSpaceManager
. Toutefois, si vous souhaitez répertorier les espaces de noms à d'autres fins, vous devez vérifier la méthode GetNamespacesInScope
exposée par la classe XmlNamespaceManager
ainsi que la classe XPathNavigator
.
Lorsque vous utilisez un XmlDocument, vous pouvez obtenir un XmlNamespaceManager de celui-ci par le code suivant:
//Instantiate an XmlDocument object.
XmlDocument xmldoc = new XmlDocument();
//Load XML file into the XmlDocument object.
xmldoc.Load("C:\\myFile.xml");
//Instantiate an XmlNamespaceManager object.
XmlNamespaceManager nsMgr = new XmlNamespaceManager(xmldoc.NameTable);
// Retrieve the namespaces into a Generic dictionary with string keys.
IDictionary<string, string> dic = nsMgr.GetNamespacesInScope(XmlNamespaceScope.All);
// Iterate through the dictionary.
...
In this article, Scott Hanselman présente un moyen d'utiliser cette méthode pour répertorier tous les espaces de noms dans un document à l'aide d'un XPathNavigator et en utilisant un pont LINQ.
@Ruchita: Le problème avec cette approche est que les déclarations d'espaces de noms peuvent être écrasées (en XML 1.0, la déclaration d'espace de noms par défaut peut également être réinitialisée, en XML 1).1 toutes les déclarations d'espace de nom) –