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:
<project defaulttargets="Build" toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><itemgroup><compile include="clsWorker.cs"></compile></itemgroup></project>
Apabila memuatkan XML ini ke dalam XmlDocument
dan cuba mendapatkan semula elemen "Kompilasi":
XmlDocument xmldoc = new XmlDocument(); xmldoc.LoadXml(Xml); XmlNode node = xmldoc.SelectSingleNode("//Compile"); // 返回null
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
:
XmlNamespaceManager ns = new XmlNamespaceManager(xmldoc.NameTable); ns.AddNamespace("msbld", "http://schemas.microsoft.com/developer/msbuild/2003"); XmlNode node = xmldoc.SelectSingleNode("//msbld:Compile", ns);
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!