Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengabaikan Ruang Nama dalam Lokasi Elemen ElementTree: Penyelesaian Mudah?

Bagaimana untuk Mengabaikan Ruang Nama dalam Lokasi Elemen ElementTree: Penyelesaian Mudah?

Linda Hamilton
Linda Hamiltonasal
2024-10-28 05:10:02923semak imbas

How to Ignore Namespaces in ElementTree's Element Location: A Simple Solution?

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!

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