Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengabaikan Ruang Nama XML apabila Menggunakan Kaedah \'find\' dan \'findall\' ElementTree dalam Python?
Mengabaikan Ruang Nama XML dalam Kaedah "cari" dan "findall" ElementTree
Apabila menggunakan modul ElementTree untuk menghuraikan dan mencari elemen dalam dokumen XML , ruang nama boleh memperkenalkan kerumitan. Berikut ialah cara untuk mengabaikan ruang nama apabila menggunakan kaedah "cari" dan "findall" dalam Python.
Isu timbul apabila dokumen XML mengandungi ruang nama yang boleh menyebabkan modul ElementTree mempertimbangkannya semasa mencari teg. Ini boleh membawa kepada hasil yang tidak dijangka, seperti yang ditunjukkan oleh contoh yang disediakan dalam soalan:
<code class="python">el1 = tree.findall("DEAL_LEVEL/PAID_OFF") # Return None el2 = tree.findall("{http://www.test.com}DEAL_LEVEL/{http://www.test.com}PAID_OFF") # Return element</code>
Untuk mengabaikan ruang nama, penyelesaiannya ialah mengubah suai teg dalam dokumen XML yang dihuraikan sebelum menggunakan "cari" atau " kaedah findall". Ini boleh dicapai menggunakan kaedah iterparse() ElementTree:
<code class="python">import io from xml.etree import ElementTree as ET # Parse the XML document it = ET.iterparse(StringIO(xml)) # Iterate over each element and strip the namespace if present for _, el in it: _, _, el.tag = el.tag.rpartition("}") # strip ns # Get the modified root element root = it.root # Now, you can search for elements without namespaces el3 = root.findall("DEAL_LEVEL/PAID_OFF") # Return matching elements</code>
Penyelesaian ini mengubah suai teg dalam dokumen yang dihuraikan, menjadikannya lebih mudah untuk mencari elemen tanpa perlu menentukan awalan ruang nama secara manual untuk setiap teg.
Atas ialah kandungan terperinci Bagaimana untuk Mengabaikan Ruang Nama XML apabila Menggunakan Kaedah \'find\' dan \'findall\' ElementTree dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!