C#: Verwendete XML-Namespaces aus XML-Dateien auslesen

URL dieses Beitrags: http://blog.stefan-macke.com/2007/08/02/c-verwendete-xml-namespaces-aus-xml-dateien-auslesen/

Lange habe ich gesucht und doch keine Antwort auf die (meiner Meinung nach einfache) Frage gefunden, wie man mit C# alle in einer XML-Datei verwendeten XML-Namespaces auslesen kann. Damit meine ich eine simple Liste mit Präfixen und den diesen zugeordneten Namespaces, wie sie im Wurzelelement der XML-Datei definiert werden.

Es gibt zwar den XmlNamespaceManager, aber dem müssen die Namespaces einer Datei manuell hinzugefügt werden, die Präfixe und URIs müssen also bekannt sein. Er liest sie nicht automatisch aus Dateien aus (abgesehen von drei Standard-Namespaces, die immer vorhanden sind).

Da ich aber gerne aus vorhandenen Dateien die verwendeten Namespaces inkl. den ihnen zugewiesenen Präfixen auslesen möchte, habe ich die folgende Methode geschrieben, die mir eine Hashtable der Namespace-URIs mit ihren Präfixen als Keys liefert.

  1. public static Hashtable GetXmlNamespaces(XmlDocument xmldoc)
  2. {
  3.   Hashtable nse = new Hashtable();
  4.   foreach (XmlAttribute att in xmldoc.DocumentElement.Attributes)
  5.   {
  6.     if (att.Name.StartsWith("xmlns"))
  7.     {
  8.       // Default-Namespace?
  9.       if (att.Name.IndexOf(":") == -1)
  10.       {
  11.         nse[string.Empty] = att.Value;
  12.       }
  13.       else
  14.       {
  15.         string nsname = att.Name.Substring(att.Name.IndexOf(":") + 1);
  16.         nse[nsname] = att.Value;
  17.       }
  18.     }
  19.   }
  20.   return nse;
  21. }

Beispiel: nse["sm"] => "http://blog.stefan-macke.de"

Weiß noch jemand eine einfachere Lösung? :)

Füge diesen Artikel zu deinen Bookmarks hinzu Diese Icons verzweigen auf soziale Netzwerke bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • del.icio.us
  • bodytext
  • MisterWong
  • Reddit
  • Technorati
  • Spurl
  • description

Einen Kommentar schreiben

XHTML: Diese Tags sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>