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!