ToolActToolAct

Herramienta de Formato XML

Entrada XML
Salida Formateada
Líneas: 1Caracteres: 0Bytes: 0
Líneas: 1Caracteres: 0

¿Qué es el Formateo XML?

El formateador XML convierte XML compacto o desordenado en una estructura indentada y legible. XML aparece en archivos de configuración, mensajes SOAP, sitemaps, feeds RSS, documentos de oficina, artefactos de compilación y muchas integraciones empresariales antiguas, donde una etiqueta de cierre ausente o un carácter mal escapado puede romper el procesamiento. La herramienta ayuda a ver elementos anidados, atributos, nodos de texto, espacios de nombres y posibles zonas de error más rápido que leyendo una línea comprimida. Es útil para depurar, documentar, comparar y enseñar, pero no sustituye la validación con XSD, contrato API o formato de un socio. Formatear mejora la lectura; no corrige automáticamente XML inválido.

Cómo usar

Cómo usar

  1. Pega o introduce datos XML en el cuadro de entrada izquierdo
  2. Selecciona el tamaño de sangría (2 espacios, 4 espacios o Tab)
  3. Haz clic en Formatear para embellecer o en Minimizar para eliminar espacios en blanco
  4. Los resultados se muestran a la derecha con resaltado de sintaxis
  5. Haz clic en Copiar o Descargar para guardar el resultado

Notas sobre XML

  • El formateo cambia el espaciado en blanco, no el significado del documento, pero el espaciado aún puede ser importante dentro de nodos de texto y documentos de contenido mixto.
  • Si el análisis falla, verifica etiquetas no cerradas, anidamiento incorrecto, atributos duplicados y caracteres sin escapar como el ampersand.

Casos de uso

Reformatea XML compacto tras verificar que se parsea correctamentePega un feed comprimido, mensaje SOAP, sitemap, fragmento SVG o respuesta de dispositivo y el parser XML del navegador lo valida antes de generar la salida. El XML válido se expande con 2 espacios, 4 espacios o tabulaciones para que los elementos anidados sean mucho más fáciles de inspeccionar.
Mantén legibles las declaraciones XML, comentarios, CDATA y etiquetas de autocierreEl formateador gestiona por separado instrucciones de procesamiento, comentarios, bloques CDATA, declaraciones, etiquetas de cierre, nodos de texto y etiquetas de autocierre en lugar de tratar el documento como texto plano. Los archivos de configuración y ejemplos de integración conservan visibles sus secciones XML especiales.
Genera XML legible o un payload compacto para entregarUsa el modo formatear al revisar la jerarquía y el modo minimizar al preparar un payload más pequeño para ejemplos, fixtures de prueba o transporte. Los errores de parseo se muestran con la información disponible de línea y columna, mientras que la validación de esquema y las reglas de negocio siguen siendo responsabilidad del sistema XML de destino.
Localiza una etiqueta faltante leyendo la posición del error del parserCuando la página reporta un fallo de parseo, anota la línea y columna y busca justo arriba un padre sin cerrar o una etiqueta de cierre suelta. El formateador solo corrige espacios en blanco, por lo que una corrección estructural real debe editarse a mano en el origen antes de re-formatear. La abreviatura de autocierre como `
` (una característica SGML aceptada por XML 1.0 §3.1) se conserva como tal, así que los elementos vacíos de HTML que viajan dentro de XHTML o RSS deben mantener su barra; usar `

` cambiará silenciosamente la página renderizada en parsers HTML5. Las secciones CDATA, incluida la regla literal del terminador `]]>`, también se mantienen intactas en lugar de des-escaparse a entidades `&`.
Ordena un fragmento SVG antes de incrustarlo en el marcadoPega un SVG de una sola línea, expándelo con indentación de 2 espacios y verifica que los datos de path, viewBox y las declaraciones de namespace estén intactos. El SVG reformateado puede inyectarse en HTML sin romper la forma, y la jerarquía facilita depurar atributos de transformación o degradado después. Según la especificación W3C XML 1.0, el orden de atributos en un elemento no es canónico, por lo que el reformateo puede reordenar id y class a una posición distinta del origen, y cualquier prefijo de namespace declarado como xmlns:svg en el elemento raíz svg debe permanecer allí o el navegador no reconocerá los hijos. La declaración XML que comienza con <?xml version es opcional para SVG inline en HTML pero obligatoria para feeds XML independientes.

Principio técnico

El formateo XML se basa en la recomendación W3C XML 1.0 (Quinta Edición). El análisis se realiza mediante `new DOMParser().parseFromString(src, 'application/xml')` (o `text/xml`), que devuelve un Document cuyos nodos coinciden con las siete producciones definidas en la especificación: Element, Attr, Text, CDATASection, Comment, ProcessingInstruction y DocumentType. A diferencia de HTML, los parsers XML son estrictos: una etiqueta sin cerrar, un `&` sin escapar o un atributo duplicado aborta el análisis y el DOMParser devuelve un elemento `<parsererror>` cuyo cuerpo contiene la línea y la columna. Los equivalentes del lado del servidor incluyen libxml2 (`xmllint --format`), `xml.etree.ElementTree` de Python, StAX/SAX de Java y `XmlReader` de .NET. El impresor serializa el DOM nodo por nodo: cada Element se abre en su propia línea con depth*indent espacios, los hijos recurren con depth+1, la etiqueta de cierre se alinea con la de apertura y los elementos vacíos colapsan a la forma de autocierre `<foo/>` que el §3.1 de la especificación declara semánticamente equivalente a `<foo></foo>`. Cinco entidades predefinidas se recodifican siempre en valores de texto y atributos: `&amp;` `&lt;` `&gt;` `&quot;` `&apos;`. Las secciones CDATA (`<![CDATA[ ... ]]>`) se preservan tal cual porque son la vía de escape explícita para contenido que de otro modo necesitaría codificación de entidades; el terminador `]]>` no puede aparecer dentro de un bloque CDATA según el §2.7, lo que el parser aplica. Las instrucciones de procesamiento como `<?xml-stylesheet?>` y la declaración XML `<?xml version="1.0" encoding="UTF-8"?>` se mantienen en el prólogo del documento. La declaración DOCTYPE se transmite como una única cadena. Dos sutilezas generan la mayor parte de la complejidad del formateador. Primero, el contenido mixto, un elemento que contiene tanto texto como elementos hijos, como `<p>Hola <b>mundo</b>!</p>`, no se puede re-indentar sin alterar el infoset del documento, porque cada carácter de espacio en blanco en dicho contexto es un nodo Text significativo. Los formateadores detectan el contenido mixto analizando si un Element tiene algún hijo Text que no sea espacio en blanco y cambian a una serialización en una sola línea para ese subárbol. Segundo, las declaraciones de namespace (`xmlns`, `xmlns:prefix`) deben permanecer en el elemento donde se declaran por primera vez; moverlas cambia el alcance. El orden de atributos no es canónico según la especificación, por lo que la mayoría de los formateadores aplican orden alfabético mientras preservan las declaraciones `xmlns:*` iniciales. El análisis y la serialización son O(n) sobre la longitud del documento; los feeds muy grandes suelen transmitirse vía SAX en lugar de construir un DOM en memoria.

  • Especificación: W3C XML 1.0 Quinta Edición (REC-xml-20081126); el DOM se construye mediante `DOMParser().parseFromString(src, 'application/xml')`, equivalente a libxml2 o `xmllint --format` del lado del servidor.
  • Estricto por diseño: etiquetas sin cerrar, `&`/`<` sin escapar, atributos duplicados o caracteres no válidos generan un elemento `<parsererror>`; la recuperación permisiva de HTML no se aplica.
  • Cinco entidades predefinidas recodificadas en valores de texto y atributos: `&amp;` `&lt;` `&gt;` `&quot;` `&apos;`. Las referencias de caracteres numéricas como `&#10;` se preservan tal cual.
  • `<foo/>` de autocierre y `<foo></foo>` son semánticamente idénticos según el §3.1; las secciones CDATA se preservan tal cual y no pueden contener el terminador `]]>`.
  • El contenido mixto (texto + elementos hijos) no se puede re-indentar sin cambiar el infoset: el impresor detecta espacios en blanco significativos y serializa esos subárboles en línea.
  • Las declaraciones de namespace (`xmlns`, `xmlns:prefix`) permanecen en el elemento de primera declaración; moverlas cambia el alcance. El orden de atributos no es canónico, por lo que es típico un orden estable (xmlns primero, luego alfabético).
  • Complejidad: O(n) para análisis y O(n) para serialización en herramientas basadas en DOM; documentos grandes se transmiten vía SAX/StAX (xml.sax en Python, javax.xml.stream en Java) para evitar cargar el árbol completo en memoria.

Ejemplos

Elementos básicos

<!-- Entrada (una línea) -->
<book><title>XML Guide</title><author>Jane Doe</author><year>2024</year></book>

<!-- Salida (2 espacios) -->
<book>
  <title>XML Guide</title>
  <author>Jane Doe</author>
  <year>2024</year>
</book>

Con atributos

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <book id="b001" lang="en" available="true">
    <title>Effective XML</title>
    <price currency="USD">29.99</price>
  </book>
</catalog>

Estructura anidada con espacios de nombres y CDATA

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ns:GetUser xmlns:ns="https://example.com/api">
      <ns:UserId>10086</ns:UserId>
      <ns:Script>
        <![CDATA[ if (a < b && b > 0) { return true; } ]]>
      </ns:Script>
    </ns:GetUser>
  </soap:Body>
</soap:Envelope>

Preguntas frecuentes

¿Qué hace?

Formatea XML con indentación de elementos anidados, coloca cada elemento en su propia línea y alinea las etiquetas de cierre. Útil para inspeccionar respuestas SOAP, feeds RSS, archivos de configuración y otras cargas XML que llegan como una sola línea gigante.

¿Valida contra un esquema?

No. Formatea cualquier XML bien formado que pegues. La validación contra esquemas (XSD, DTD, RELAX NG) requiere una herramienta aparte. Los errores de buena formación (etiquetas desemparejadas, corchetes de cierre faltantes) se reportan, pero la página no los corrige.

¿Conserva el orden de los atributos?

Sí. Técnicamente, según la especificación, el orden de los atributos XML no es significativo, pero el formateador conserva el orden original para no sorprenderte. Las secciones CDATA, los comentarios y las instrucciones de procesamiento también se preservan.

¿Cómo se gestionan los espacios en blanco?

Los espacios entre elementos se normalizan (un elemento por línea con indentación). Los espacios dentro del contenido textual se conservan por defecto: el contenido del elemento es significativo. Los atributos xml:space='preserve' se respetan donde aparezcan.

¿Puedo minificar XML?

Algunas versiones ofrecen un modo de minificación que elimina los espacios entre elementos. Cuidado: cualquier espacio que fuera significativo (contenido textual, regiones xml:space='preserve') debe preservarse. Prueba el ciclo completo si tu XML tiene contenido de texto enriquecido.

¿Se sube el XML?

No. El parseo y el formateo se ejecutan en tu navegador usando DOMParser y XMLSerializer (integrados en el navegador). No se transmite nada.

¿Y los espacios de nombres XML?

Las declaraciones de espacios de nombres (xmlns) y los elementos o atributos con prefijo se formatean exactamente como están escritos. Si redeclaras el mismo namespace en elementos anidados, se conserva (algunos validadores lo tienen en cuenta, otros no).