Menavigasi XML dengan Ruang Nama: SelectSingleNode
Cabaran
Apabila bekerja dengan dokumen XML yang mengandungi ruang nama, kaedah SelectSingleNode
standard dalam .NET boleh bertindak secara tidak dijangka. Ini kerana ungkapan XPath mudah seperti //Compile
tidak memahami ruang nama secara semulajadi.
Mari kita ilustrasikan dengan contoh:
<code class="language-xml"><project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <itemgroup> <compile include="clsWorker.cs"/> </itemgroup> </project></code>
Percubaan untuk memilih nod <compile>
menggunakan xmldoc.SelectSingleNode("//Compile")
akan mengembalikan null
. Pengisytiharan ruang nama xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
adalah puncanya.
Penyelesaian: Memanfaatkan Kuasa XmlNamespaceManager
Kunci untuk memilih nod dengan betul dalam XML ruang nama ialah menggunakan kelas XmlNamespaceManager
. Kelas ini membolehkan anda mentakrifkan awalan ruang nama dan URI yang sepadan dengan jelas.
Begini cara anda boleh mengubah suai kod anda:
<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>
Kami mencipta XmlNamespaceManager
, menambah pemetaan ruang nama ("msbld" sebagai awalan untuk URI yang ditentukan), dan kemudian menyerahkan pengurus ini kepada SelectSingleNode
. Ungkapan XPath //msbld:Compile
kini dengan betul mengenal pasti nod dalam ruang nama yang ditentukan. Pendekatan ini memastikan pemilihan nod yang tepat walaupun dalam struktur XML yang kompleks dan ruang nama.
Atas ialah kandungan terperinci Bagaimanakah Ruang Nama XML Mempengaruhi `SelectSingleNode` dan Bagaimana Saya Boleh Memilih Nod dengan Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!