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!