Navigieren von Namespace-Konflikten beim XML-Parsing mit XmlDocument
XML-Dokumente verwenden häufig Namespaces, um Elemente mit identischen Namen, aber unterschiedlichen Ursprüngen zu unterscheiden. Dies kann die Elementauswahl mit der XmlDocument
-Methode von SelectSingleNode
erschweren.
Betrachten Sie dieses XML-Snippet, das das xmlns
-Attribut verwendet, um den http://schemas.microsoft.com/developer/msbuild/2003
-Namespace zu definieren:
<code class="language-xml"><project defaulttargets="Build" toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <Compile include="clsWorker.cs"/> </ItemGroup> </project></code>
Ein naiver Versuch, das <Compile>
-Element abzurufen:
<code class="language-csharp">XmlDocument xmldoc = new XmlDocument(); xmldoc.LoadXml(xml); XmlNode node = xmldoc.SelectSingleNode("//Compile");</code>
wird ergeben null
. Dies liegt daran, dass der XPath-Ausdruck Namespaces ignoriert. Die Lösung liegt in der Verwendung eines XmlNamespaceManager
:
Um das <Compile>
-Element innerhalb des Namespace-XML korrekt auszuwählen, verwenden Sie ein XmlNamespaceManager
, um Namespaces Präfixen zuzuordnen:
<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>
Jetzt gibt SelectSingleNode
das Element <Compile>
korrekt zurück und ermöglicht den Zugriff auf seine Attribute und untergeordneten Knoten. Dieser Ansatz löst effektiv Namespace-Kollisionen und ermöglicht eine robuste XML-Manipulation.
Das obige ist der detaillierte Inhalt vonWie kann ich Namespace-Kollisionen lösen, wenn ich SelectSingleNode mit XmlDocument verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!