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!