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
Barbara Streisandasal
2024-12-30 08:44:091021semak imbas

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>

Jika anda cuba menghuraikan XML ini menggunakan kod berikut:

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

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

SyntaxError: prefix 'owl' not found in prefix map

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)

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!

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