Ваша основная проблема получения пространств имен из XmlDocument может быть решена простым извлечением NameTable
XmlDocument и созданием XmlNameSpaceManager
из него.
Однако, если вы хотите перечислить пространства имен для какой-либо другой цели, вы должны проверить метод GetNamespacesInScope
, предоставляемый классом XmlNamespaceManager
, а также классом XPathNavigator
.
При использовании XmlDocument вы можете получить из него XmlNamespaceManager с помощью следующего кода:
//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.
...
В этой статье Скотт Хансельман представляет способ использования этого метода для вывода списка всех пространств имен в документе с помощью XPathNavigator и моста LINQ.