Heim > Backend-Entwicklung > C++ > Warum gibt SelectSingleNode beim Umgang mit XML-Namespaces Null zurück?

Warum gibt SelectSingleNode beim Umgang mit XML-Namespaces Null zurück?

Barbara Streisand
Freigeben: 2025-01-07 21:03:48
Original
394 Leute haben es durchsucht

Why Does SelectSingleNode Return Null When Dealing with XML Namespaces?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage