Il problema di base relativo al recupero degli spazi dei nomi da un XmlDocument può essere risolto semplicemente recuperando NameTable
di XmlDocument e creando uno XmlNameSpaceManager
da esso.
Tuttavia, se si desidera elencare gli spazi dei nomi per altri scopi, è necessario controllare il metodo GetNamespacesInScope
esposto dalla classe XmlNamespaceManager
e la classe XPathNavigator
.
Quando si utilizza un XmlDocument, è possibile ottenere un XmlNamespaceManager da esso tramite il seguente codice:
//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 presenta un modo per utilizzare questo metodo per elencare tutti gli spazi dei nomi in un documento utilizzando un XPathNavigator e usando un ponte LINQ.
@Ruchita: il problema con questo approccio è che le dichiarazioni di spazi dei nomi possono essere sovrascritte (in XML 1.0 la dichiarazione dello spazio dei nomi predefinita può anche essere reimpostata, in XML 1.1 tutte le dichiarazioni di namespace) –