Navigieren in XML mit Namespaces: Die SelectSingleNode
Herausforderung
Beim Arbeiten mit XML-Dokumenten, die Namespaces enthalten, kann sich die Standardmethode SelectSingleNode
in .NET unerwartet verhalten. Dies liegt daran, dass ein einfacher XPath-Ausdruck wie //Compile
Namespaces nicht von Natur aus versteht.
Lassen Sie es uns anhand eines Beispiels veranschaulichen:
<code class="language-xml"><project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <itemgroup> <compile include="clsWorker.cs"/> </itemgroup> </project></code>
Der Versuch, den Knoten <compile>
mit xmldoc.SelectSingleNode("//Compile")
auszuwählen, gibt null
zurück. Die Namespace-Deklaration xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ist der Übeltäter.
Die Lösung: Die Kraft von XmlNamespaceManager
Der Schlüssel zur korrekten Auswahl von Knoten innerhalb von Namespace-XML liegt in der Verwendung der Klasse XmlNamespaceManager
. Mit dieser Klasse können Sie Namespace-Präfixe und die entsprechenden URIs explizit definieren.
So können Sie Ihren Code ändern:
<code class="language-csharp">XmlNamespaceManager ns = new XmlNamespaceManager(xmldoc.NameTable); ns.AddNamespace("msbld", "http://schemas.microsoft.com/developer/msbuild/2003"); XmlNode node = xmldoc.SelectSingleNode("//msbld:Compile", ns);</code>
Wir erstellen ein XmlNamespaceManager
, fügen eine Namespace-Zuordnung hinzu („msbld“ als Präfix für den angegebenen URI) und übergeben diesen Manager dann an SelectSingleNode
. Der XPath-Ausdruck //msbld:Compile
identifiziert den Knoten jetzt korrekt innerhalb des definierten Namespace. Dieser Ansatz gewährleistet eine genaue Knotenauswahl auch in komplexen XML-Strukturen mit Namensraum.
Das obige ist der detaillierte Inhalt vonWie wirkt sich der XML-Namespace auf „SelectSingleNode' aus und wie kann ich Knoten richtig auswählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!