"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-08
Parcourir:677

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 :

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.

Dernier tutoriel Plus>

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