Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Menggunakan SelectSingleNode dalam C# untuk Mendapatkan Elemen XML dengan Ruang Nama?

Bagaimanakah Saya Menggunakan SelectSingleNode dalam C# untuk Mendapatkan Elemen XML dengan Ruang Nama?

Barbara Streisand
Barbara Streisandasal
2025-01-07 20:53:101021semak imbas

How Do I Use SelectSingleNode in C# to Retrieve XML Elements with Namespaces?

Menggunakan SelectSingleNode untuk mengendalikan ruang nama XML dalam C#

Masalah biasa apabila mengakses elemen XML menggunakan SelectSingleNode ialah ia mungkin mengembalikan null jika teg mengandungi ruang nama XML. Masalah ini berlaku kerana SelectSingleNode hanya mempertimbangkan elemen dalam ruang nama lalai secara lalai.

Pertimbangkan contoh struktur XML yang disediakan:

<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>

Apabila memuatkan XML ini ke dalam XmlDocument dan cuba mendapatkan semula elemen "Kompilasi":

<code class="language-csharp">XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(Xml);

XmlNode node = xmldoc.SelectSingleNode("//Compile"); // 返回null</code>

Hasilnya adalah batal kerana elemen "Kompilasi" terletak dalam "https://www.php.cn/link/55a51239dc6fe8cf8c09ec91f36f5250.

Penyelesaian: Gunakan XmlNamespaceManager

Untuk menyelesaikan masalah ini, kita perlu menggunakan XmlNamespaceManager untuk menentukan ruang nama yang betul semasa melakukan operasi SelectSingleNode:

<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 membolehkan kami memetakan awalan ruang nama "msbld" kepada URI ruang nama sebenar. Dengan pendekatan ini, kami kini boleh berjaya mendapatkan semula elemen "Kompilasi" menggunakan sintaks SelectSingleNode yang diubah suai.

Atas ialah kandungan terperinci Bagaimanakah Saya Menggunakan SelectSingleNode dalam C# untuk Mendapatkan Elemen XML dengan Ruang Nama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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