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

DDD
Lepaskan: 2024-10-26 11:56:03
asal
954 orang telah melayarinya

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

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!