Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Menghuraikan XML dengan Ruang Nama dalam Python Menggunakan ElementTree?
Menghuraikan XML dengan Ruang Nama dalam Python melalui 'ElementTree'
ElementTree ialah perpustakaan yang berkuasa dalam Python untuk menghuraikan dokumen XML, terutamanya apabila berurusan dengan Dokumen XML yang mempunyai ruang nama. Ruang nama digunakan untuk mengelakkan perlanggaran nama apabila unsur daripada sumber berbeza mempunyai nama yang sama.
Masalah:
Anda ingin menghuraikan dokumen XML yang mempunyai berbilang ruang nama bersarang menggunakan ElementTree. Secara khususnya, anda ingin mencari semua teg owl:Class dan mengekstrak nilai contoh rdfs:label di dalamnya. Walau bagaimanapun, anda menghadapi ralat "SyntaxError: awalan 'burung hantu' tidak ditemui dalam peta awalan" kerana kewujudan ruang nama.
Penyelesaian:
Untuk mengatasi ralat ini , anda perlu menentukan kamus ruang nama apabila menggunakan kaedah .find(), .findall(), dan .iterfind() API ElementTree. Kamus ini memetakan awalan ruang nama kepada URL ruang nama yang sepadan. Begini cara untuk melaraskan kod anda:
namespaces = {'owl': 'http://www.w3.org/2002/07/owl#'} root.findall('owl:Class', namespaces)
Dengan menghantar kamus ruang nama, anda secara jelas memberitahu ElementTree cara menyelesaikan awalan burung hantu ke URL ruang nama yang betul. Anda boleh menghantar berbilang awalan dan URL mengikut keperluan.
Pendekatan Alternatif:
Sebagai alternatif, anda boleh menggunakan sintaks berikut tanpa bergantung pada kamus ruang nama:
root.findall('{http://www.w3.org/2002/07/owl#}Class')
Di sini, anda dengan jelas menyatakan URL ruang nama yang disertakan dalam pendakap kerinting sebelum nama tag.
Cadangan:
Pertimbangkan untuk menggunakan perpustakaan lxml, yang menawarkan sokongan ruang nama yang lebih baik berbanding ElementTree. Ia secara automatik mengumpul ruang nama untuk anda dalam atribut .nsmap pada elemen.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghuraikan XML dengan Ruang Nama dalam Python Menggunakan ElementTree?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!