
Fehlerbehebung SelectSingleNodeNull-Rückgaben in XML-Dokumenten mit Namespaces
Beim Arbeiten mit XML-Dokumenten, die Namespaces enthalten, kann die Verwendung von SelectSingleNode zum Suchen nach bestimmten Knoten unerwartet null zurückgeben. Dies geschieht häufig, wenn sich das Zielelement in einem Namespace befindet, der nicht explizit in Ihrem XPath-Ausdruck deklariert ist.
Lassen Sie es uns anhand eines Beispiels veranschaulichen:
<code class="language-xml"><?xml version="1.0" encoding="utf-8"?>
<project defaulttargets="Build" toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<itemgroup>
<compile include="clsWorker.cs"/>
</itemgroup>
</project></code>Wenn Sie dieses XML in ein XmlDocument laden (z. B. xmldoc), gibt xmldoc.SelectSingleNode("//Compile") null zurück. Dies liegt daran, dass sich das compile-Element innerhalb des durch xmlns deklarierten Namespace befindet. Das Entfernen des xmlns-Attributs würde das Problem lösen, aber das ist nicht immer eine praktische Lösung.
Die Lösung: Verwendung von XmlNamespaceManager
Der richtige Ansatz besteht darin, ein XmlNamespaceManager mit SelectSingleNode zu verwenden. Dadurch können Sie Namespace-Präfixe und die entsprechenden URIs angeben. So geht's:
<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 verwenden diesen Manager dann innerhalb des SelectSingleNode-Aufrufs. Dadurch wird der Knoten compile korrekt identifiziert und abgerufen. Der Schlüssel besteht darin, das Präfix msbld:Compile im XPath-Ausdruck zu verwenden, um explizit auf den Namespace zu verweisen.
Das obige ist der detaillierte Inhalt vonWarum gibt SelectSingleNode beim Umgang mit XML-Namespaces Null zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!