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
Lepaskan: 2025-01-05 13:39:38
asal
961 orang telah melayarinya

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>
Salin selepas log masuk

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan