Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengelakkan NullPointerExceptions Apabila Menyoal Elemen XML dengan Ruang Nama?

Bagaimana untuk Mengelakkan NullPointerExceptions Apabila Menyoal Elemen XML dengan Ruang Nama?

Patricia Arquette
Patricia Arquetteasal
2025-01-05 13:39:38963semak imbas

How to Avoid NullPointerExceptions When Querying XML Elements with Namespaces?

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!

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