Maison >développement back-end >Tutoriel Python >Comment ignorer les espaces de noms dans l'emplacement des éléments d'ElementTree : une solution simple ?

Comment ignorer les espaces de noms dans l'emplacement des éléments d'ElementTree : une solution simple ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-28 05:10:021030parcourir

How to Ignore Namespaces in ElementTree's Element Location: A Simple Solution?

Ignorer les espaces de noms dans l'emplacement des éléments d'ElementTree

Lorsque vous utilisez la méthode findall dans ElementTree pour localiser des éléments dans un document XML prenant en charge les espaces de noms, cela devient Il est nécessaire de spécifier l'espace de noms pour chaque balise. Cela peut entraîner des désagréments. Cet article présente une méthode pour ignorer les espaces de noms dans les méthodes de recherche ElementTree telles que find et findall.

Problème :

Comme le démontre l'exemple de code fourni, le tree.findall( L'appel "DEAL_LEVEL/PAID_OFF") renvoie Aucun en raison de l'espace de noms ignoré dans le fichier XML. L'ajout de {http://www.test.com} à chaque balise est une solution de contournement peu pratique.

Solution :

Au lieu de modifier le document XML, il est préférable de analysez-le et manipulez les balises dans le résultat. Cela permet de gérer plusieurs espaces de noms et alias d'espaces de noms.

Le code Python suivant fournit une solution :

<code class="python">from io import StringIO  # for Python 2 import from StringIO instead
import xml.etree.ElementTree as ET

# instead of ET.fromstring(xml)
it = ET.iterparse(StringIO(xml))
for _, el in it:
    _, _, el.tag = el.tag.rpartition('}') # strip ns
root = it.root</code>

Explication :

La solution exploite la fonction ET.iterparse, qui traite les documents XML de manière incrémentielle. Lors de l'itération, chaque élément el voit sa balise modifiée en supprimant l'espace de noms à l'aide de rpartition('}'). Cela supprime efficacement l'espace de noms de toutes les balises.

Avantages :

Cette approche vous permet d'ignorer les préfixes d'espace de noms lors de la recherche d'éléments, simplifiant ainsi le processus et éliminant le besoin de spécifier manuellement les espaces de noms.

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