Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengabaikan Ruang Nama XML apabila Menggunakan Kaedah \"find\" dan \"findall\" ElementTree dalam Python?

Bagaimana untuk Mengabaikan Ruang Nama XML apabila Menggunakan Kaedah \"find\" dan \"findall\" ElementTree dalam Python?

DDD
DDDasal
2024-10-26 11:56:03956semak imbas

How to Ignore XML Namespaces when Using ElementTree's

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!

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