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

Linda Hamilton
Libérer: 2024-10-28 05:10:02
original
923 Les gens l'ont consulté

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

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!