Maison >développement back-end >Tutoriel Python >Comment puis-je analyser du XML avec des espaces de noms à l'aide d'ElementTree de Python ?

Comment puis-je analyser du XML avec des espaces de noms à l'aide d'ElementTree de Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-30 08:44:091033parcourir

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

Analyse XML avec des espaces de noms en Python via 'ElementTree'

XML avec des espaces de noms peut être rencontré lorsque vous travaillez avec diverses sources de données. Un de ces cas est celui du travail avec des ontologies publiées en RDF, où l'utilisation d'espaces de noms est courante. Cela peut entraîner des problèmes lors de la tentative d'analyse d'un tel XML à l'aide de la bibliothèque ElementTree de Python.

Considérez le XML suivant :

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

Si vous tentez d'analyser ce XML à l'aide du code suivant :

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

Vous rencontrerez l'erreur suivante en raison de la présence d'espaces de noms dans le XML :

SyntaxError: prefix 'owl' not found in prefix map

Pour résoudre ce problème d'espace de noms, vous devez fournir un dictionnaire d'espace de noms explicite aux méthodes .find(), .findall() et .iterfind() :

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

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

Ce dictionnaire d'espace de noms permettra à ElementTree de rechercher l'URL d'espace de noms correcte pour le préfixe 'owl:' et de résoudre le problème. problème.

Vous pouvez également utiliser la bibliothèque lxml, qui offre une prise en charge supérieure des espaces de noms et collecte automatiquement les espaces de noms dans l'attribut .nsmap sur les éléments.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn