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 :
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
Pour ignorer les espaces de noms, la solution est pour modifier les balises dans le document XML analysé avant d'utiliser les méthodes "find" ou "findall". Ceci peut être réalisé en utilisant la méthode iterparse() d'ElementTree :
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
Cette solution modifie les balises dans le document analysé, facilitant la localisation des éléments sans avoir besoin de spécifier manuellement le préfixe d'espace de noms pour chaque balise.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3