Procesando Documentos XML con lxml en Python

Procesando Documentos XML con lxml en Python

XML es un formato de datos estándar que se utiliza para representar datos de forma legible por humanos y máquinas. Es un formato muy popular para el intercambio de datos entre sistemas informáticos, y se utiliza en una amplia gama de aplicaciones, como la web, la electrónica y la gestión de datos.

En Python, existen varias bibliotecas disponibles para procesar datos XML. Una de las bibliotecas más populares es lxml, que ofrece una API potente y flexible para el análisis de XML.

En este tutorial, aprenderemos a procesar documentos XML con lxml en Python.

Instalación de lxml

La primera tarea es instalar lxml en nuestro sistema. Podemos hacerlo usando el administrador de paquetes de nuestra distribución Linux o macOS. Por ejemplo, en Ubuntu, podemos instalar lxml con el siguiente comando:

sudo apt install python3-lxml

En Windows, podemos instalar lxml usando pip:

pip install lxml

Lectura de un documento XML

Para leer un documento XML con lxml, podemos usar la función etree.parse(). Esta función toma el nombre de un archivo XML como argumento y devuelve un objeto ElementTree que representa el árbol de elementos del documento.

Por ejemplo, el siguiente código lee el documento XML example.xml y lo almacena en una variable llamada tree:

Python
import lxml.etree as etree

tree = etree.parse("example.xml")

Navegando por el árbol de elementos

Una vez que tenemos un objeto ElementTree, podemos navegar por el árbol de elementos para acceder a la información que contiene. Podemos hacerlo usando las propiedades y métodos de los objetos Element y SubElement.

Por ejemplo, el siguiente código imprime el nombre de la raíz del documento XML:

Python
root = tree.getroot()
print(root.tag)

Este código imprimirá el siguiente texto:

books

También podemos usar la propiedad text para acceder al contenido de un elemento:

Python
title = root.find("title").text
print(title)

Este código imprimirá el siguiente texto:

The Hitchhiker's Guide to the Galaxy

Filtrando elementos

Podemos usar la función find() para encontrar elementos específicos en un árbol de elementos. Esta función toma como argumento una cadena que representa el nombre de la etiqueta o el atributo del elemento que queremos encontrar.

Por ejemplo, el siguiente código encuentra todos los elementos book en el árbol de elementos y los almacena en una lista:

Python
books = root.findall("book")

Podemos usar un bucle for para iterar sobre los elementos de la lista:

Python
for book in books:
    print(book.tag)
    print(book.find("title").text)

Este código imprimirá el siguiente texto:

book
The Hitchhiker's Guide to the Galaxy
book
The Restaurant at the End of the Universe
book
Life, the Universe and Everything
book
So Long, and Thanks for All the Fish

Modificando documentos XML

Podemos usar la función find() para encontrar elementos específicos en un árbol de elementos y luego modificarlos. Por ejemplo, el siguiente código cambia el título del primer libro en el documento XML:

Python
book = root.find("book")
book.find("title").text = "A New Title"

etree.write("example.xml", tree)

Este código creará un nuevo archivo XML llamado example.xml con el siguiente contenido:

XML
<books>
  <book>
    <title>A New Title</title>
    <author>Douglas Adams</year>
    <genre>Science Fiction</genre>
  </book>
</books>

Conclusión

En este tutorial, aprendimos a procesar documentos XML con lxml en Python. Exploramos las siguientes tareas:

  • Lectura de un documento XML
  • Navegación por el árbol de elementos
  • Filtrado de elementos
  • Modificación de documentos XML

Para obtener más información sobre lxml, consulte la documentación oficial: https://lxml.de/.