Python – Crear Archivo XML

Python trae todo lo necesario para escribir XML en la biblioteca estándar: xml.etree.ElementTree. Se construye el árbol en memoria y se escribe de una vez.

El árbol

import xml.etree.ElementTree as ET

raiz = ET.Element("catalogo")
libro = ET.SubElement(raiz, "libro", id="1")
ET.SubElement(libro, "titulo").text = "El Quijote"
ET.SubElement(libro, "autor").text = "Cervantes & Saavedra"

arbol = ET.ElementTree(raiz)
ET.indent(arbol, space="  ")
arbol.write("catalogo.xml", encoding="utf-8", xml_declaration=True)
catalogo.xml<?xml version='1.0' encoding='utf-8'?>
<catalogo>
  <libro id="1">
    <titulo>El Quijote</titulo>
    <autor>Cervantes &amp; Saavedra</autor>
  </libro>
</catalogo>

Element crea la raíz, SubElement cuelga hijos de un padre, los atributos van como parámetros con nombre y el texto se asigna a .text.

Tres detalles que importan

El ampersand se ha escapado solo. En el código pone Cervantes & Saavedra y en el archivo, &amp;, que es lo correcto. Por eso no se escribe XML pegando cadenas: el primer dato con un & o un < produce un archivo que ningún programa sabe leer.

encoding="utf-8" y xml_declaration=True. Sin ellos, write escribe en ASCII —las eñes acaban como &#241;— y sin la línea <?xml …?> del principio.

ET.indent, disponible desde Python 3.9, sangra el resultado. Sin él todo sale en una sola línea:

sin indent<?xml version='1.0' encoding='utf-8'?>
<catalogo><libro id="1"><titulo>El Quijote</titulo><autor>Cervantes &amp; Saavedra</autor></libro></catalogo>

Igual de válido y más pequeño. La sangría es para que lo lea una persona.

La versión anterior de esta página importaba xml.etree.cElementTree. Todavía funciona, pero es un nombre antiguo que hoy apunta al mismo módulo: usa xml.etree.ElementTree. Y la salida que mostraba no correspondía al código: el código ponía atributo="algo" y la salida, atributo="blah".

Más información en inglés: Create XML file in Python.

Todo el código se ejecutó con Python 3.14 en un contenedor limpio antes de publicar esta página; las salidas están copiadas de esa ejecución.

2 comentarios en «Python – Crear Archivo XML»

  1. Hola, yo trabajo con la librería pygame que sirve para crear videojuegos pero estoy haciendo un juego muy largo y elaborado que necesita un sistema de guardado para que al cerrar el juego no se pierdan los datos.
    Recurrí al xml y creo que todo eso está bien pero tienen una idea específicamente para «guardar progreso» en python?

    Responder
    • No se cuantos datos debes guardar, pero quizás en una estructura JSON te sea mas fácil, ya que es mas «convertible» a diccionario, que te da un acceso mas rapido a lo que quieras cambiar.

      Responder

Deja un comentario