Sep3Foto Tobias Schütt

Aus der Praxis – XmlNamespaceManager dynamisch aus XML-Dokument generieren (C#)

verfasst von am 3-Sep-09, 14:50:02 - 0 Kommentare
Kategorie: .NET Entwicklung, XML

Das Problem ist bekannt: Man hat verschiedene XML-Dokumente vorliegen und möchte mit XPath darauf zugreifen. Nur wo bekomme ich den XmlNamespaceManager her?

Die Lösung ist einfach und schnell: man liest ihn aus den Dokumenten selbst aus.

Denn ein Standard XML Dokument hat alle benötigten Informationen schon enthalten! Hier ein Auszug aus einer InfoPath XML Datei als Beispiel:

<?xml version="1.0" encoding="UTF-8"?> <?mso-infoPathSolution solutionVersion="…" productVersion="…" PIVersion="…" href="…" ?> <?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.2"?> <my:meineFelder
       xmlns:my=http://schemas.microsoft.com/office/infopath/2003/myXSD/2009-09-03T12:35:53
xml:lang="en-us"></my:meineFelder>

Man kann direkt sehen, dass dort in der vorletzten Zeile die Namespace Informationen enthalten sind. Um an diese heranzukommen bedarf es nicht viel Code:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(content);

XPathNavigator navigator = xmlDoc.CreateNavigator();
navigator.MoveToFollowing(XPathNodeType.Element);
XmlNamespaceManager nsManager = new XmlNamespaceManager(xmlDoc.NameTable);
foreach (KeyValuePair<string, string> ns in navigator.GetNamespacesInScope(XmlNamespaceScope.All))
{
    nsManager.AddNamespace(ns.Key, ns.Value);
}

Mit diesem kleinem Code-Stück wird das XML-Dokument eingelesen, dann wird einer Navigator dafür erstellt. Der Navigator wird auf das erste Element weitergeschaltet, aus dem dann die gesamten Namespace Informationen ausgelesen werden.


[zurück]
 

Es gibt 0 Kommentare zum Thema


    Kommentar abgeben:

    Name:
    URL:
    E-Mail:
    Kommentar:
    Validierung: Bitte geben Sie die sechs Ziffern ein.