Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Menghuraikan XML dengan Ruang Nama Menggunakan ElementTree Python?

Bagaimanakah Saya Boleh Menghuraikan XML dengan Ruang Nama Menggunakan ElementTree Python?

Barbara Streisand
Lepaskan: 2024-12-30 08:44:09
asal
1020 orang telah melayarinya

How Can I Parse XML with Namespaces Using Python's ElementTree?

Menghuraikan XML dengan Ruang Nama dalam Python melalui 'ElementTree'

XML dengan ruang nama boleh ditemui semasa bekerja dengan pelbagai sumber data. Satu kes sedemikian ialah bekerja dengan ontologi yang diterbitkan menggunakan RDF, di mana penggunaan ruang nama adalah perkara biasa. Ini boleh menyebabkan masalah apabila cuba menghuraikan XML sedemikian menggunakan perpustakaan ElementTree Python.

Pertimbangkan XML berikut:

<rdf:RDF xml:base="http://dbpedia.org/ontology/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns="http://dbpedia.org/ontology/">

    <owl:Class rdf:about="http://dbpedia.org/ontology/BasketballLeague">
        <rdfs:label xml:lang="en">basketball league</rdfs:label>
        <rdfs:comment xml:lang="en">
          a group of sports teams that compete against each other
          in Basketball
        </rdfs:comment>
    </owl:Class>

</rdf:RDF>
Salin selepas log masuk

Jika anda cuba menghuraikan XML ini menggunakan kod berikut:

tree = ET.parse("filename")
root = tree.getroot()
root.findall('owl:Class')
Salin selepas log masuk

Anda akan menghadapi ralat berikut kerana kehadiran ruang nama dalam XML:

SyntaxError: prefix 'owl' not found in prefix map
Salin selepas log masuk

Untuk menyelesaikan isu ruang nama ini, anda perlu menyediakan kamus ruang nama yang jelas kepada kaedah .find(), .findall(), dan .iterfind():

namespaces = {'owl': 'http://www.w3.org/2002/07/owl#'} # add more as needed

root.findall('owl:Class', namespaces)
Salin selepas log masuk

Kamus ruang nama ini akan membenarkan ElementTree mencari URL ruang nama yang betul untuk awalan 'owl:' dan menyelesaikan isu.

Sebagai alternatif, anda boleh beralih kepada menggunakan perpustakaan lxml, yang menawarkan sokongan ruang nama yang unggul dan mengumpul ruang nama secara automatik dalam atribut .nsmap pada elemen.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghuraikan XML dengan Ruang Nama Menggunakan ElementTree 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan