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 ?
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!