Maison  >  Article  >  développement back-end  >  Comment ignorer les espaces de noms XML pour l'emplacement des éléments dans Python ElementTree ?

Comment ignorer les espaces de noms XML pour l'emplacement des éléments dans Python ElementTree ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 07:18:30512parcourir

How to Ignore XML Namespaces for Element Location in Python ElementTree?

Ignorer les espaces de noms XML pour l'emplacement des éléments dans Python ElementTree

Dans le module ElementTree, localiser des éléments spécifiques dans un fichier XML peut être difficile en cas de rencontre espaces de noms, comme illustré dans l’exemple fourni. Lors de l'utilisation de la méthode findall, l'inclusion de {http://www.test.com} avant chaque balise devient gênante.

Solution :

Au lieu de modifier le XML lui-même, une approche plus optimale consiste à modifier les noms des balises après avoir analysé le XML. Cela permet la gestion de plusieurs espaces de noms et alias d'espace de noms.

Voici le code modifié à l'aide de la fonction iterparse :

<code class="python">from io import StringIO  # for Python 2 import from StringIO instead
import xml.etree.ElementTree as ET

with open('test.xml', 'r') as f:
    xml = f.read()

it = ET.iterparse(StringIO(xml))
for _, el in it:
    _, _, el.tag = el.tag.rpartition('}')  # strip ns

root = it.root</code>

En définissant _, _, el.tag = el.tag. rpartition('}'), l'espace de noms (_{http://www.test.com}) est supprimé du nom de la balise. Cela permet le traitement ultérieur des balises sans tenir compte de leurs espaces de noms. Par conséquent, la méthode findall :

<code class="python">el1 = root.findall("DEAL_LEVEL/PAID_OFF")</code>

renverra le élément sans le préfixe d'espace de noms.

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