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

DDD
Libérer: 2024-10-26 11:56:03
original
954 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!