Verwenden von SelectSingleNode zur Verarbeitung von XML-Namespaces in C#
Ein häufiges Problem beim Zugriff auf XML-Elemente mit SelectSingleNode
besteht darin, dass möglicherweise Null zurückgegeben wird, wenn das Tag einen XML-Namespace enthält. Dieses Problem tritt auf, weil SelectSingleNode
standardmäßig nur Elemente im Standard-Namespace berücksichtigt.
Betrachten Sie die bereitgestellte Beispiel-XML-Struktur:
<code class="language-xml"><project defaulttargets="Build" toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><itemgroup><compile include="clsWorker.cs"></compile></itemgroup></project></code>
Wenn Sie dieses XML in XmlDocument
laden und versuchen, das „Compile“-Element abzurufen:
<code class="language-csharp">XmlDocument xmldoc = new XmlDocument(); xmldoc.LoadXml(Xml); XmlNode node = xmldoc.SelectSingleNode("//Compile"); // 返回null</code>
Das Ergebnis ist null, da sich das Element „Compile“ in „https://www.php.cn/link/55a51239dc6fe8cf8c09ec91f36f5250 befindet.
Lösung: Verwenden Sie XmlNamespaceManager
Um dieses Problem zu lösen, müssen wir XmlNamespaceManager
verwenden, um den richtigen Namespace anzugeben, wenn wir den SelectSingleNode
-Vorgang ausführen:
<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>
XmlNamespaceManager
ermöglicht es uns, das Namespace-Präfix „msbld“ einem tatsächlichen Namespace-URI zuzuordnen. Mit diesem Ansatz können wir nun das „Compile“-Element mithilfe der geänderten SelectSingleNode
-Syntax erfolgreich abrufen.
Das obige ist der detaillierte Inhalt vonWie verwende ich SelectSingleNode in C#, um XML-Elemente mit Namespaces abzurufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!