Maison  >  Article  >  développement back-end  >  Comment ignorer les espaces de noms XML lors de l'utilisation des méthodes \'find\' et \'findall\' d'ElementTree en Python ?

Comment ignorer les espaces de noms XML lors de l'utilisation des méthodes \'find\' et \'findall\' d'ElementTree en Python ?

DDD
DDDoriginal
2024-10-26 11:56:031051parcourir

How to Ignore XML Namespaces when Using ElementTree's

Ignorer l'espace de noms XML dans les méthodes "find" et "findall" d'ElementTree

Lors de l'utilisation du module ElementTree pour analyser et localiser des éléments dans des documents XML , les espaces de noms peuvent introduire de la complexité. Voici comment ignorer les espaces de noms lors de l'utilisation des méthodes "find" et "findall" en Python.

Le problème survient lorsque les documents XML contiennent des espaces de noms qui peuvent amener le module ElementTree à les prendre en compte lors de la recherche de balises. Cela peut conduire à des résultats inattendus, comme le démontre l'exemple fourni dans la question :

<code class="python">el1 = tree.findall("DEAL_LEVEL/PAID_OFF")  # Return None
el2 = tree.findall("{http://www.test.com}DEAL_LEVEL/{http://www.test.com}PAID_OFF")  # Return element</code>

Pour ignorer les espaces de noms, la solution est de modifier les balises dans le document XML analysé avant d'utiliser le "find" ou " méthodes findall". Ceci peut être réalisé en utilisant la méthode iterparse() d'ElementTree :

<code class="python">import io
from xml.etree import ElementTree as ET

# Parse the XML document
it = ET.iterparse(StringIO(xml))

# Iterate over each element and strip the namespace if present
for _, el in it:
    _, _, el.tag = el.tag.rpartition("}")  # strip ns

# Get the modified root element
root = it.root

# Now, you can search for elements without namespaces
el3 = root.findall("DEAL_LEVEL/PAID_OFF")  # Return matching elements</code>

Cette solution modifie les balises dans le document analysé, ce qui facilite la localisation des éléments sans avoir besoin de spécifier manuellement le préfixe d'espace de noms pour chaque balise.

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