Mengendalikan Ruang Nama XML dalam XDocument
Apabila bekerja dengan dokumen XML yang mengandungi ruang nama, seseorang mungkin menghadapi kes di mana elemen pertanyaan mengembalikan nilai nol. Ini boleh berlaku apabila ruang nama XML tidak dikendalikan dengan betul.
Pertimbangkan coretan XML berikut:
<E2ETraceEvent xmlns="http://schemas.microsoft.com/2004/06/E2ETraceEvent"> <System xmlns="http://schemas.microsoft.com/2004/06/windows/eventlog/system"> <EventID>589828</EventID> <Correlation ActivityID="{00000000-0000-0000-0000-000000000000}"><!--Value to be extracted--> <VirtualPath>/Service.svc</VirtualPath> </Correlation> </System> </E2ETraceEvent>
Andaikan anda mempunyai kod berikut yang cuba menanyakan elemen Korelasi dan mengekstrak ActivityIDnya nilai atribut:
XDocument xDoc = XDocument.Parse(xmlString); XElement xEl1 = xDoc.Element("E2ETraceEvent"); XElement xEl2 = xEl1.Element("System"); XElement xEl3 = xEl2.Element("Correlation"); // NullPointerException can occur here XAttribute xAtt1 = xEl3.Attribute("ActivityID"); String sValue = xAtt1.Value;
Melaksanakan kod ini tanpa mengendalikan ruang nama mengembalikan rujukan nol untuk xEl3 kerana kaedah Element() mencari elemen yang sepadan dengan nama tanpa mengambil kira ruang nama. Untuk menyelesaikan masalah ini, adalah perlu untuk memasukkan ruang nama ke dalam pertanyaan.
XNamespace nsSys = "http://schemas.microsoft.com/2004/06/windows/eventlog/system"; XElement xEl2 = xDoc.Element(nsSys + "System"); XElement xEl3 = xEl2.Element(nsSys + "Correlation"); XAttribute xAtt1 = xEl3.Attribute("ActivityID"); String sValue = xAtt1.Value;
Dengan menggunakan kelas XNamespace untuk mewakili ruang nama, kaedah Element() boleh mengenal pasti elemen dalam ruang nama dengan betul. Dalam contoh ini, nsSys mewakili ruang nama untuk elemen Sistem.
Ringkasnya, apabila berurusan dengan dokumen XML yang mengandungi ruang nama, adalah penting untuk mengendalikan ruang nama dengan betul untuk mengelakkan rujukan nol semasa menyoal elemen. Dengan menggunakan kelas XNamespace dan memasukkannya ke dalam kaedah Element(), seseorang boleh mengakses elemen dan atributnya dengan tepat.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan NullPointerExceptions Apabila Menyoal Elemen XML dengan Ruang Nama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!