Formatear e indentar XML
- Panel
- Documentación
- API
¿Por qué formatear XML?
El formateo XML (también llamado puesta en forma XML, indentación XML o pretty print) consiste en reorganizar un documento XML compacto o minificado en una estructura indentada, legible línea a línea. Un XML bien formateado mejora la legibilidad humana, lo que es indispensable cuando hay que leer una respuesta SOAP, recorrer un flujo RSS o inspeccionar el contenido de un fichero de configuración.
En concreto, se formatea el XML por cuatro razones principales:
- Depuración: detectar rápidamente una etiqueta sin cerrar, un atributo que falta o una estructura incoherente.
- Integración manual: copiar limpiamente un fragmento en un fichero de configuración sin romper la indentación existente.
- Revisión de código: comparar dos versiones de un documento XML en un diff Git se vuelve legible cuando cada etiqueta está en su propia línea.
- Documentación y ejemplos: un XML formateado es mucho más pedagógico en una documentación técnica o un README.
Casos de uso típicos
El XML sigue siendo omnipresente en el ecosistema del software. Estos son los formatos en los que los desarrolladores utilizan más a menudo un formateador XML:
- Respuestas SOAP: los sobres
<soap:Envelope>devueltos por los web services SOAP suelen llegar minificados. - Flujos RSS y Atom: para inspeccionar o auditar un flujo de sindicación.
- Configuraciones Spring, Maven (
pom.xml), Ant, Ivy: ficheros de build y de dependencias Java. AndroidManifest.xmly otros recursos XML de un proyecto Android.- Ficheros SVG: un gráfico vectorial exportado desde un software de diseño suele estar comprimido en una sola línea.
- Exportaciones de comercio electrónico: flujos de productos de Google Shopping, exportaciones de Magento, Shopify o PrestaShop.
- Documentos OOXML: los ficheros
.docx,.xlsxy.pptxson archivos ZIP que contienen ficheros XML que a menudo es necesario inspeccionar. - Sitemaps XML: los
sitemap.xmlservidos a los motores de búsqueda.
Cómo funciona el formateo XML
Un formateador XML no se contenta con añadir espacios al azar. Realiza dos pasos:
- Parsing: el documento se lee y, después, se transforma en árbol DOM (Document Object Model). Esta etapa también valida que el XML esté bien formado (etiquetas correctamente anidadas, atributos entre comillas, un solo elemento raíz).
- Serialización indentada: el árbol DOM se vuelve a emitir como texto con saltos de línea entre los elementos y una indentación proporcional a la profundidad en el árbol.
Este enfoque por árbol garantiza que la estructura lógica del documento permanece estrictamente idéntica: solo se modifican los espacios no significativos entre etiquetas. Las secciones CDATA, los comentarios y las instrucciones de procesamiento se preservan. Las transformaciones más profundas (XSLT) o las consultas (XPath) operan, además, sobre ese mismo árbol DOM.
Cómo utilizar el formateador XML
El procedimiento es deliberadamente sencillo:
- Pegue su documento XML en la zona de texto, o suba un fichero
.xml. - Valide el formulario: el documento se analiza y se indenta automáticamente.
- El resultado formateado aparece en la zona de salida. En caso de error de parsing, un mensaje indica la naturaleza y la posición aproximada del problema.
- Copie el resultado con el botón correspondiente, o descárguelo para integrarlo directamente en su proyecto.
Buenas prácticas de indentación XML
Algunas convenciones que respetar para producir un XML limpio y duradero:
- Indentación: 2 o 4 espacios según la convención de su equipo. Manténgase coherente en todo el proyecto.
- Saltos de línea: un elemento por línea, lo que hace que los diffs Git sean utilizables.
- Secciones CDATA: un buen formateador conserva íntegramente los bloques
<![CDATA[ ... ]]>sin reindentar su contenido, que se trata como texto en bruto. - Codificación: declare siempre la codificación en la primera línea con
<?xml version="1.0" encoding="UTF-8"?>. UTF-8 es el estándar de hecho. - Atributos: si un elemento tiene muchos atributos, algunos equipos los pasan a la línea siguiente para mejorar la legibilidad; si no, permanecen en la misma línea que la etiqueta de apertura.
- Comentarios:
<!-- ... -->deben conservarse tal cual por el formateador.
Ejemplo antes / después
Este es un ejemplo concreto de un XML compacto embellecido por el formateador.
Antes (una sola línea, ilegible):
<root><item id="1">val</item><item id="2">val2</item></root>
Después (formateado con 2 espacios):
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item id="1">val</item>
<item id="2">val2</item>
</root>
La estructura lógica es estrictamente idéntica: solo cambia la disposición visual.
Ejemplo completo
Un documento XML más voluminoso tras el formateo se parece a esto:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<user id="12345">
<name>John Doe</name>
<email>johndoe@example.com</email>
<address>
<street>123 Main St</street>
<city>Springfield</city>
<state>IL</state>
<postalCode>62704</postalCode>
<country>USA</country>
</address>
<phoneNumbers>
<phoneNumber type="home">555-1234</phoneNumber>
<phoneNumber type="work">555-5678</phoneNumber>
</phoneNumbers>
<preferences>
<newsletter>true</newsletter>
<theme>dark</theme>
</preferences>
<lastLogin>2024-06-14T09:30:00Z</lastLogin>
</user>
</root>
Preguntas frecuentes
¿Qué es un XML bien formado?
Un XML se considera bien formado (well-formed) cuando respeta las reglas sintácticas básicas: un único elemento raíz, etiquetas correctamente anidadas y cerradas, atributos entre comillas, caracteres especiales escapados (&, <, >). Es un requisito previo para poder parsear el documento. No hay que confundirlo con un XML válido, que además respeta un esquema XSD o una DTD.
¿Cuál es la diferencia entre formateo (pretty print) y minificación XML?
El pretty print añade saltos de línea e indentación para la lectura humana. La minificación hace lo contrario: elimina todos los espacios no significativos para reducir el tamaño del documento, lo que es útil para el tránsito en red (respuestas SOAP, API XML). Los dos documentos son semánticamente equivalentes.
¿Se preservan los comentarios y las secciones CDATA al formatear?
Sí. Un formateador correcto preserva los comentarios <!-- ... -->, las secciones <![CDATA[ ... ]]> así como las instrucciones de procesamiento (<? ... ?>). El contenido de un CDATA permanece intacto sin reindentación, dado que se trata como texto en bruto. Verifique el resultado si sus comentarios tienen importancia documental.
¿Se gestionan los namespaces XML (xmlns)?
Sí. Las declaraciones de namespace (xmlns:soap="...") y los prefijos asociados (<soap:Envelope>) se preservan tal cual. El formateador no renombra los prefijos ni desplaza las declaraciones en el árbol, lo que garantiza que la semántica del documento permanece idéntica. Los namespaces por defecto (sin prefijo) también se mantienen en su nivel de declaración.
¿Hay que indentar con espacios o con tabulaciones?
Ambos funcionan, pero los espacios son la convención dominante porque se muestran de forma idéntica en todas partes (terminales, navegadores, diff Git). 2 o 4 espacios según la verbosidad de su XML: 2 para los documentos muy anidados (SVG, configuraciones Spring), 4 para los documentos planos. Lo esencial sigue siendo la coherencia en todo el proyecto.
¿El formateador modifica la semántica del documento?
No. Solo se ajustan los espacios en blanco entre etiquetas. La estructura DOM, los valores de los atributos y el contenido textual de los elementos permanecen idénticos. Una excepción: el contenido textual significativo (con xml:space="preserve") debe conservarse tal cual; verifique este aspecto si sus datos incluyen espacios con sentido propio.
¿Se puede validar un XML al mismo tiempo que se formatea?
El formateador ya efectúa una validación sintáctica (XML bien formado) puesto que debe parsear el documento. Para una validación contra un esquema XSD o una DTD, hace falta una herramienta dedicada: la validación estructural supera el alcance de un simple formateador. xmllint --schema o xerces sirven para esta etapa adicional.
Ejemplo de solicitud
curl -X POST https://cdrn.fr/api/v1/tools/xml-formatter/execute \
-H "Content-Type: application/json" \
-d '{"input":"..."}'
Esquema de entrada
| Campo | Tipo | Obligatorio | Por defecto |
|---|---|---|---|
input |
text | ✓ | – |
Puntos de acceso
GET https://cdrn.fr/api/v1/tools- lista todas las herramientas disponiblesGET https://cdrn.fr/api/v1/tools/xml-formatter- recupera el esquema de esta herramientaPOST https://cdrn.fr/api/v1/tools/xml-formatter/execute- ejecuta esta herramienta con un payload JSON