"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo ignorar los espacios de nombres XML cuando se utilizan los métodos \"find\" y \"findall\" de ElementTree en Python?

¿Cómo ignorar los espacios de nombres XML cuando se utilizan los métodos \"find\" y \"findall\" de ElementTree en Python?

Publicado el 2024-11-08
Navegar:796

How to Ignore XML Namespaces when Using ElementTree\'s \

Ignorar el espacio de nombres XML en los métodos "find" y "findall" de ElementTree

Cuando se utiliza el módulo ElementTree para analizar y localizar elementos en documentos XML , los espacios de nombres pueden introducir complejidad. Aquí se explica cómo ignorar los espacios de nombres cuando se utilizan los métodos "find" y "findall" en Python.

El problema surge cuando los documentos XML contienen espacios de nombres que pueden hacer que el módulo ElementTree los considere al buscar etiquetas. Esto puede generar resultados inesperados, como lo demuestra el ejemplo proporcionado en la pregunta:

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

Para ignorar los espacios de nombres, la solución es para modificar las etiquetas en el documento XML analizado antes de utilizar los métodos "find" o "findall". Esto se puede lograr usando el método iterparse() de 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

Esta solución modifica las etiquetas en el documento analizado, lo que facilita la localización de elementos sin necesidad de especificar manualmente el prefijo del espacio de nombres para cada etiqueta.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3