Mengabaikan Ruang Nama dalam Lokasi Elemen ElementTree
Apabila menggunakan kaedah findall dalam ElementTree untuk mencari elemen dalam dokumen XML yang menyedari ruang nama, ia menjadi diperlukan untuk menentukan ruang nama bagi setiap tag. Ini boleh menyebabkan ketidakselesaan. Artikel ini membentangkan kaedah untuk mengabaikan ruang nama dalam kaedah carian ElementTree seperti find dan findall.
Isu:
Seperti yang ditunjukkan dalam kod sampel yang disediakan, tree.findall( Panggilan "DEAL_LEVEL/PAID_OFF") mengembalikan Tiada kerana ruang nama yang diabaikan dalam fail XML. Menambah {http://www.test.com} pada setiap teg ialah penyelesaian yang menyusahkan.
Penyelesaian:
Daripada mengubah suai dokumen XML, adalah lebih baik untuk menghuraikannya dan memanipulasi tag dalam hasilnya. Ini membolehkan untuk mengendalikan berbilang ruang nama dan alias ruang nama.
Kod Python berikut menyediakan penyelesaian:
<code class="python">from io import StringIO # for Python 2 import from StringIO instead import xml.etree.ElementTree as ET # instead of ET.fromstring(xml) it = ET.iterparse(StringIO(xml)) for _, el in it: _, _, el.tag = el.tag.rpartition('}') # strip ns root = it.root</code>
Penjelasan:
Penyelesaian memanfaatkan fungsi ET.iterparse, yang memproses dokumen XML secara berperingkat. Semasa lelaran, setiap elemen el mempunyai tegnya yang diubah suai dengan mengalih keluar ruang nama menggunakan rpartition('}'). Ini secara berkesan menanggalkan ruang nama daripada semua teg.
Faedah:
Pendekatan ini membolehkan anda mengabaikan awalan ruang nama apabila mencari elemen, memudahkan proses dan menghapuskan keperluan untuk tentukan ruang nama secara manual.
Atas ialah kandungan terperinci Bagaimana untuk Mengabaikan Ruang Nama dalam Lokasi Elemen ElementTree: Penyelesaian Mudah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!