Bonita impresión XML en Python
Cuando se trata de datos XML en Python, garantizar su legibilidad y estructura puede mejorar en gran medida la comprensión y el mantenimiento del código. La impresión bonita de XML, o formatearlo con sangría y saltos de línea adecuados, es una técnica valiosa para lograr estos objetivos.
En este artículo, exploramos dos métodos diferentes para imprimir XML usando Python: xml.dom.minidom y xml.etree.ElementTree. Al comprender estos enfoques, los desarrolladores pueden presentar eficazmente datos XML de una manera organizada y visualmente atractiva, lo que facilita el análisis y la manipulación.
¿Cómo imprimir XML en Python?
A continuación se muestran los dos métodos mediante los cuales podemos realizar una impresión bonita en Python:
Método 1: usar xml.dom.minidom
A continuación se detallan los pasos que seguiremos para realizar una impresión bonita usando xml.dom.minidom:
Importe el módulo requerido: comenzamos importando el módulo `xml.dom.minidom`, que proporciona una implementación ligera de la API del Modelo de objetos de documento (DOM) para el análisis XML.
-
Defina la función `pretty_print_xml_minidom`: esta función toma una cadena XML como entrada y es responsable de analizar e imprimir el XML usando `xml.dom.minidom`.
Analizar la cadena XML: dentro de la función `pretty_print_xml_minidom`, usamos el método `xml.dom.minidom.parseString()` para analizar la cadena XML y crear un objeto DOM.
Imprima el XML de forma bonita: A continuación, utilizamos el método `toprettyxml()` en el objeto DOM para generar una cadena XML impresa de forma bonita. Pasamos el parámetro `sangría` con un valor de `" "` para especificar el nivel de sangría deseado (dos espacios en este caso).
Eliminar líneas vacías: de forma predeterminada, `toprettyxml()` agrega líneas vacías en la salida. Para eliminar estas líneas vacías, dividimos la bonita cadena XML en nuevas líneas (`\n`), eliminamos cualquier espacio en blanco inicial o final de cada línea y luego unimos las líneas no vacías nuevamente.
Imprime el bonito XML: Finalmente, imprimimos la bonita cadena XML resultante.
Programa 2: Uso de xml.etree.ElementTree
A continuación se detallan los pasos que seguiremos para realizar una impresión bonita usando xml.etree.ElementTree:
Importe el módulo requerido: comenzamos importando el módulo `xml.etree.ElementTree`, que proporciona una API rápida y eficiente para analizar y manipular XML.
Defina la función `indent`: esta es una función personalizada que agrega sangría de forma recursiva a los elementos XML. Se necesita un parámetro `elem` (elemento XML) y un parámetro `level` opcional para especificar el nivel de sangría actual (predeterminado en 0).
Sangrar el XML: Dentro de la función `indent`, agregamos sangría modificando los atributos `text` y `tail` de los elementos XML. . El atributo `text` representa el texto inmediatamente después de la etiqueta de apertura, y el atributo `tail` representa el texto inmediatamente antes de la etiqueta de cierre. Al agregar sangría a estos atributos, logramos una impresión bonita.
Defina la función `pretty_print_xml_elementtree`: esta función toma una cadena XML como entrada y es responsable de analizar e imprimir el XML usando `xml.etree.ElementTree`.
-
Analizar la cadena XML: dentro de la función `pretty_print_xml_elementtree`, utilizamos el método `ET.fromstring()` para analizar la cadena XML y crear un objeto ElementTree.
Sangrar el XML: llamamos a la función `indent()` en el elemento raíz del XML para agregar la sangría de forma recursiva a todos los elementos.
Convertir el elemento XML nuevamente en una cadena: utilizamos el método `ET.tostring()` para convertir el elemento XML nuevamente en una representación de cadena. Pasamos el parámetro `encoding` con un valor de `"unicode"` para garantizar la codificación adecuada de la cadena resultante.
Imprime el bonito XML: Finalmente, imprimimos la bonita cadena XML resultante.
Ambos programas proporcionan diferentes enfoques para lograr una impresión bonita de XML. El primer programa utiliza la API DOM proporcionada por `xml.dom.minidom` para analizar e imprimir XML, mientras que el segundo programa usa `xml.etree.ElementTree`. módulo y define una función personalizada para agregar sangría de forma recursiva a elementos XML.
A continuación se muestran ejemplos de programas que utilizan los dos métodos anteriores:
Programa 1: Uso de xml.dom.minidom
import xml.dom.minidom
def pretty_print_xml_minidom(xml_string):
# Parse the XML string
dom = xml.dom.minidom.parseString(xml_string)
# Pretty print the XML
pretty_xml = dom.toprettyxml(indent=" ")
# Remove empty lines
pretty_xml = "\n".join(line for line in pretty_xml.split("\n") if line.strip())
# Print the pretty XML
print(pretty_xml)
# Example usage
xml_string = '''
<root>
<element attribute="value">
<subelement>Text</subelement>
</element>
</root>
'''
pretty_print_xml_minidom(xml_string)
Producción
<?xml version="1.0" ?>
<root>
<element attribute="value">
<subelement>Text</subelement>
</element>
</root>
Programa 2: Uso de xml.etree.ElementTree
import xml.etree.ElementTree as ET
def indent(elem, level=0):
# Add indentation
indent_size = " "
i = "\n" + level * indent_size
if len(elem):
if not elem.text or not elem.text.strip():
elem.text = i + indent_size
if not elem.tail or not elem.tail.strip():
elem.tail = i
for elem in elem:
indent(elem, level + 1)
if not elem.tail or not elem.tail.strip():
elem.tail = i
else:
if level and (not elem.tail or not elem.tail.strip()):
elem.tail = i
def pretty_print_xml_elementtree(xml_string):
# Parse the XML string
root = ET.fromstring(xml_string)
# Indent the XML
indent(root)
# Convert the XML element back to a string
pretty_xml = ET.tostring(root, encoding="unicode")
# Print the pretty XML
print(pretty_xml)
# Example usage
xml_string = '''
<root>
<element attribute="value">
<subelement>Text</subelement>
</element>
</root>
'''
pretty_print_xml_elementtree(xml_string)
Producción
<root>
<element attribute="value">
<subelement>Text</subelement>
</element>
</root>
Conclusión
En conclusión, Pretty Printing XML en Python es esencial para mejorar la legibilidad y la estructura de los datos XML. Ya sea que utilicen la biblioteca xml.dom.minidom o xml.etree.ElementTree, los desarrolladores pueden formatear XML fácilmente con la sangría adecuada. Al adoptar estas técnicas, los programadores pueden mejorar la comprensión del código, simplificar la depuración y promover una mejor colaboración cuando trabajan con datos XML en proyectos de Python.