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

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

DDD
DDDoriginal
2024-12-20 09:53:11276parcourir

How Can I Parse XML with Namespaces in Python Using ElementTree?

Analyse XML avec espace de noms en Python via 'ElementTree'

ElementTree est une bibliothèque puissante en Python pour analyser des documents XML, en particulier lorsqu'il s'agit de Documents XML comportant des espaces de noms. Les espaces de noms sont utilisés pour éviter les collisions de noms lorsque des éléments provenant de sources différentes portent le même nom.

Problème :

Vous souhaitez analyser un document XML comportant plusieurs espaces de noms imbriqués à l'aide de ArbreÉlément. Plus précisément, vous souhaitez rechercher toutes les balises Owl:Class et extraire la valeur des instances rdfs:label qu'elles contiennent. Cependant, vous rencontrez une erreur « SyntaxError : prefix 'owl' not found in prefix map » en raison de l'existence d'espaces de noms.

Solution :

Pour surmonter cette erreur , vous devez spécifier un dictionnaire d'espace de noms lorsque vous utilisez les méthodes .find(), .findall() et .iterfind() de ElementTree API. Ce dictionnaire mappe les préfixes d'espace de noms à leurs URL d'espace de noms correspondantes. Voici comment ajuster votre code :

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

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

En transmettant le dictionnaire des espaces de noms, vous indiquez explicitement à ElementTree comment résoudre le préfixe hibou en URL d'espace de noms correcte. Vous pouvez transmettre plusieurs préfixes et URL selon vos besoins.

Approches alternatives :

Vous pouvez également utiliser la syntaxe suivante sans vous fier à un dictionnaire d'espaces de noms :

root.findall('{http://www.w3.org/2002/07/owl#}Class')

Ici, vous spécifiez explicitement l'URL de l'espace de noms entre accolades avant la balise name.

Recommandation :

Envisagez d'utiliser la bibliothèque lxml, qui offre une meilleure prise en charge des espaces de noms par rapport à ElementTree. Il collecte automatiquement les espaces de noms pour vous 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