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
Libérer: 2024-12-30 08:44:09
original
1020 Les gens l'ont consulté

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>
Copier après la connexion

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

tree = ET.parse("filename")
root = tree.getroot()
root.findall('owl:Class')
Copier après la connexion

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
Copier après la connexion

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)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal