Un formateador y validador XML que no sale de tu navegador
XML sirve para intercambiar datos estructurados: canales RSS, mapas del sitio, facturas electrónicas, archivos de configuración o exportaciones de programas de gestión. A menudo llegan en una sola línea, o con una etiqueta mal cerrada que impide importarlos. Esta herramienta comprueba que el documento está bien formado, lo formatea o lo compacta, lo muestra en forma de árbol y lo convierte a JSON.
Pega el texto en «Tu XML» o abre un archivo. La comprobación se hace con cada cambio: «XML bien formado.», o bien la línea, la columna y la causa del error con un extracto resaltado y el botón «Ir al error».
Cómo se usa
- Elige el «Resultado»: «Formatear», «Minificar», «XML → JSON» o «JSON → XML».
- Ajusta la «Sangría» (2 espacios, 4 espacios o tabulación), la posición de los «Atributos» (En la línea de la etiqueta o Uno por línea) y marca o no «Conservar los comentarios».
- Pasa a «Árbol» para desplegar los elementos. Al pulsar una etiqueta o un atributo aparece su ruta XPath, por ejemplo
/catalog/product[2]/@ref, que «Copiar la ruta» lleva al portapapeles. El buscador recorre etiquetas, atributos y textos. - Pulsa «Copiar» o «Descargar».
¿Bien formado o válido?
Un documento bien formado respeta la sintaxis de XML; uno válido cumple además un esquema (DTD o XSD) que fija las etiquetas permitidas. Esta herramienta comprueba la buena formación, no el esquema. Las reglas son pocas: un único elemento raíz, cada etiqueta cerrada en orden inverso a su apertura, valores de atributos entre comillas, nombres que distinguen mayúsculas y los caracteres & y < escapados en el texto.
| Escrito | Problema | Correcto |
|---|---|---|
<a><b></a></b> | etiquetas cruzadas | <a><b></b></a> |
<a id=1/> | valor sin comillas | <a id="1"/> |
<a>I+D&C</a> | & sin escapar | <a>I+D&C</a> |
<a> </a> | entidad HTML desconocida en XML | <a> </a> |
<Precio>9</precio> | mayúsculas distintas | <precio>9</precio> |
Ejemplo: con <pedido> en la línea 1, <articulo>Bolígrafo en la línea 2 (con dos espacios de sangría) y </pedido> en la línea 3, la herramienta indica «línea 3, columna 1: se encontró </pedido> cuando <articulo>, abierta en la línea 2, columna 3, sigue abierta». Después, el DOMParser del navegador revisa el mismo texto y muestra su propio mensaje si encuentra otro fallo.
CDATA, espacios de nombres y entidades
Una sección <![CDATA[ … ]]> guarda texto en bruto en el que < y & no necesitan escaparse. Su contenido se copia tal cual, tanto al formatear como al minificar. Lo mismo ocurre con el texto de un elemento, con el contenido mixto (texto y etiquetas mezclados) y con cualquier elemento marcado con xml:space="preserve": solo cambian los espacios entre etiquetas.
Un prefijo como p:price debe declararse con xmlns:p="…" en el elemento o en un padre; si no, la herramienta lo señala. Sin DTD solo existen cinco entidades con nombre: &, <, >, " y ', además de las referencias numéricas como é. Las entidades externas nunca se cargan: el DOMParser del navegador no descarga ningún archivo ni dirección declarados en un DOCTYPE, lo que descarta los ataques por entidad externa.
Convertir XML a JSON y al revés
La conversión sigue una convención sencilla: atributos con el prefijo @, texto con #text, CDATA con #cdata, elementos repetidos agrupados en una lista y valores siempre como cadenas. Así, <articulo ref="X1" cant="2">Bolígrafo</articulo> da {"articulo":{"@ref":"X1","@cant":"2","#text":"Bolígrafo"}}, y la conversión inversa devuelve la misma etiqueta. No se conservan los comentarios ni el orden entre etiquetas de nombres distintos.
Preguntas frecuentes
¿Un archivo de 20 MB bloqueará la página?
No. El formateo se hace en segundo plano; solo la comprobación del navegador ocupa la página un momento. Por encima de 2 MB el archivo no se copia en la zona de entrada y solo se muestra el principio del resultado, pero «Copiar» y «Descargar» incluyen todo.
¿Por qué mi ruta XPath no encuentra nada en mi programa?
Casi siempre por un espacio de nombres por defecto (xmlns="…"): la mayoría de las bibliotecas exigen entonces un prefijo declarado en el código.
¿El formateo modifica mis datos?
No. Se reescriben los espacios entre etiquetas y se normalizan los espacios dentro de ellas, pero los textos, los valores de los atributos y las comillas no cambian. Un elemento que solo contiene espacios queda vacío.