Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich XML mit Namespaces mithilfe von Pythons ElementTree analysieren?

Wie kann ich XML mit Namespaces mithilfe von Pythons ElementTree analysieren?

Barbara Streisand
Barbara StreisandOriginal
2024-12-30 08:44:091028Durchsuche

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

XML mit Namespaces in Python über „ElementTree“ analysieren

XML mit Namespaces kann bei der Arbeit mit verschiedenen Datenquellen angetroffen werden. Ein solcher Fall ist die Arbeit mit mit RDF veröffentlichten Ontologien, bei denen die Verwendung von Namespaces üblich ist. Dies kann zu Problemen führen, wenn Sie versuchen, solches XML mit der ElementTree-Bibliothek von Python zu analysieren.

Berücksichtigen Sie das folgende XML:

<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>

Wenn Sie versuchen, dieses XML mit dem folgenden Code zu analysieren:

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

Aufgrund des Vorhandenseins von Namespaces in der wird der folgende Fehler auftreten XML:

SyntaxError: prefix 'owl' not found in prefix map

Um dieses Namespace-Problem zu lösen, müssen Sie ein explizites Namespace-Wörterbuch für die Methoden .find(), .findall() und .iterfind() bereitstellen:

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

root.findall('owl:Class', namespaces)

Mit diesem Namespace-Wörterbuch kann ElementTree die korrekte Namespace-URL für das Präfix „owl:“ nachschlagen und das Problem auflösen Problem.

Alternativ können Sie zur Verwendung der lxml-Bibliothek wechseln, die eine hervorragende Namespace-Unterstützung bietet und Namespaces automatisch im .nsmap-Attribut für Elemente sammelt.

Das obige ist der detaillierte Inhalt vonWie kann ich XML mit Namespaces mithilfe von Pythons ElementTree analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn