Rumah > pembangunan bahagian belakang > C++ > Mengapa SelectSingleNode Mengembalikan Null Apabila Berurusan dengan Ruang Nama XML?

Mengapa SelectSingleNode Mengembalikan Null Apabila Berurusan dengan Ruang Nama XML?

Barbara Streisand
Lepaskan: 2025-01-07 21:03:48
asal
393 orang telah melayarinya

Why Does SelectSingleNode Return Null When Dealing with XML Namespaces?

Menyelesaikan masalah SelectSingleNode Pulangan Null dalam Dokumen XML dengan Ruang Nama

Apabila bekerja dengan dokumen XML yang mengandungi ruang nama, menggunakan SelectSingleNode untuk mencari nod tertentu mungkin akan kembali null tanpa diduga. Ini selalunya berlaku apabila elemen sasaran berada dalam ruang nama yang tidak diisytiharkan secara eksplisit dalam ungkapan XPath anda.

Mari kita ilustrasikan dengan contoh:

<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>
Salin selepas log masuk

Jika anda memuatkan XML ini ke dalam XmlDocument (cth., xmldoc), xmldoc.SelectSingleNode("//Compile") akan mengembalikan null. Ini kerana elemen compile berada dalam ruang nama yang diisytiharkan oleh xmlns. Mengalih keluar atribut xmlns akan menyelesaikan isu, tetapi itu bukan penyelesaian yang praktikal.

Penyelesaian: Menggunakan XmlNamespaceManager

Pendekatan yang betul ialah menggunakan XmlNamespaceManager dengan SelectSingleNode. Ini membolehkan anda menentukan awalan ruang nama dan URI yang sepadan. Begini caranya:

<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>
Salin selepas log masuk

Kami mencipta XmlNamespaceManager, menambah pemetaan ruang nama ("msbld" sebagai awalan untuk URI yang ditentukan), dan kemudian menggunakan pengurus ini dalam panggilan SelectSingleNode. Ini mengenal pasti dan mendapatkan semula nod compile dengan betul. Kuncinya ialah menggunakan awalan msbld:Compile dalam ungkapan XPath untuk merujuk ruang nama secara eksplisit.

Atas ialah kandungan terperinci Mengapa SelectSingleNode Mengembalikan Null Apabila Berurusan dengan Ruang Nama XML?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan