Formateador y Validador de XML

Formatea, minifica y valida XML — sin subir nada, sin cuenta, funciona con cualquier documento bien formado.

Tu XML no sale de esta pestaña — seguro para feeds y configuración de producción

Formatea, minifica y valida XML — con espacios de nombres, CDATA y contenido mixto

Ejemplo cargado: edítalo o límpialo

Sobre este formateador y validador de XML

Pega un documento XML y toca Formatear para obtener la salida indentada, Minificar para una sola línea, o Validar para revisar la buena formación con recuento de elementos, atributos y profundidad. El pretty-printer respeta el contenido mixto — un párrafo como <em>Hola <b>mundo</b>!</em> se queda en una sola línea en vez de partirse en tres — y mantiene los atributos en su orden original con los prefijos de espacio de nombres intactos. Si la entrada está mal formada, el parser devuelve un error específico con la ubicación, no un genérico «XML inválido».

Por dentro, la herramienta usa el DOMParser del navegador para analizar el documento y un serializador escrito a mano que recorre el DOM resultante y emite el texto formateado. Eso significa que todo corre localmente: tu XML — que en muchas cargas significa payloads SOAP, feeds RSS, las tripas de un .xlsx, documentos SVG o recursos de Android — nunca sale de esta pestaña. No hay endpoint de subida que comprometer, no hay registros de servidor que auditar y no hay límite diario.

El formateador maneja los cinco tipos de nodo XML que de verdad te vas a encontrar: elementos (con cualquier nivel de anidamiento y cualquier número de atributos), texto (incluidas las secciones CDATA para contenido que de otra forma habría que escapar), comentarios y procesamientos como <?xml-stylesheet?>. La declaración XML misma se preserva de la entrada y se emite al inicio de la salida, porque la API del DOM la elimina al parsear — un bug sutil que hace tropezar a muchos formateadores ingenuos.

Una pregunta común: ¿qué cuenta como «bien formado»? La especificación de XML traza una línea dura. Todo elemento debe cerrarse, los nombres de etiqueta distinguen mayúsculas, los atributos deben ir entre comillas, las entidades deben estar definidas o usar las cinco predefinidas (&amp; &lt; &gt; &quot; &apos;), y el documento debe tener exactamente un elemento raíz. La buena formación es el nivel de entrada — un documento que la incumple no puede ser procesado por ninguna herramienta XML. Lo que este validador NO revisa es la validez contra un esquema concreto (DTD, XSD o RELAX NG); esa es una etapa aparte que además suele necesitar el archivo del esquema.

La salida usa indentación de dos espacios por defecto, que es la convención que esperan los consumidores de XML y la mayoría de los editores; cuatro espacios o tabulador están a un desplegable de distancia para los equipos que los prefieran. La indentación es significativa solo para la legibilidad — todo parser XML la descarta — así que el ajuste que elijas produce análisis idénticos byte por byte.

XML bien formado — la lista de verificación

Cada problema que esta herramienta señalará se remonta a una de estas reglas. Si un documento las cumple, cualquier consumidor de XML puede analizarlo; si las incumple, falla en todas partes.

ReglaQué la rompeLa corrección
Todo elemento se cierra<p>Hola — sin </p>Ciérralo: <p>Hola</p> — o autocierra si está vacío: <br/>
Los nombres de etiqueta cuadran en mayúsculas<Item>...</item>Cuadra la caja: <Item>...</Item>
Los atributos van entrecomillados<a href=foo>Entrecomilla: <a href="foo"> o <a href='foo'>
Cada atributo es único por elemento<a class="x" class="y">Usa un solo atributo, o una lista separada por espacios
Las entidades están predefinidas o declaradas<p>M&Ms</p>Escapa: <p>M&amp;Ms</p>
Exactamente un elemento raízDos <item> de nivel superior sin envolturaEnvuélvelos: <items><item/><item/></items>
Los caracteres reservados se escapan en el texto<code>a < b</code><code>a &lt; b</code> o usa CDATA

Las cinco entidades predefinidas

CarácterEntidadCuándo la necesitas
&&amp;Siempre — incluso dentro de valores de atributo
<&lt;En el contenido de texto, siempre. En valores de atributo, siempre
>&gt;Opcional en texto, pero idiomático; requerido tras «]]» para evitar la secuencia de fin de CDATA
"&quot;Dentro de valores de atributo con comilla doble
'&apos;Dentro de valores de atributo con comilla simple

Estas cinco son las únicas entidades que funcionan en todo documento XML sin una declaración DTD. Cualquier otra — &nbsp;, &copy;, &euro; — es HTML, no XML; o la declaras en un DTD, o usas su forma numérica (&#160;), o envuelves el texto en una sección CDATA.

Cuándo usar CDATA

Una sección CDATA le dice al parser «trata este contenido como texto literal, no interpretes marcado ni entidades dentro». Úsala cuando el texto contiene muchos caracteres que de otra forma habría que escapar — un fragmento de código, un comando de shell, un trozo de SQL, JavaScript o HTML llevado dentro de un sobre XML.

Sin CDATA — cada < hay que escaparlo:
<query>SELECT * FROM users WHERE age &lt; 18 AND active = &quot;yes&quot;</query>

Con CDATA — escríbelo tal cual:
<query><![CDATA[SELECT * FROM users WHERE age < 18 AND active = "yes"]]></query>
Las secciones CDATA no se pueden anidar y no pueden contener la secuencia literal «]]>» — ese es el único texto con el que hay que tener cuidado dentro.

Espacios de nombres en un párrafo

Un espacio de nombres permite que dos vocabularios compartan el mismo documento sin que colisionen sus nombres de etiqueta — el caso clásico es un sobre SOAP que lleva un payload específico de la aplicación. El atributo xmlns declara un URI (que es solo un identificador, no una URL que se descargue) y o bien lo asocia a un prefijo o establece uno por defecto:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <getOrder xmlns="urn:example:orders">
      <id>A-10482</id>
    </getOrder>
  </soap:Body>
</soap:Envelope>
Los elementos soap: pertenecen al espacio de nombres del sobre SOAP; <getOrder> e <id> heredan el espacio por defecto declarado en getOrder.

Los prefijos son solo alias — el URI es lo que de verdad identifica el espacio. Renombrar soap: a s: no cambia nada mientras se asocie el mismo URI. Este formateador preserva los prefijos exactamente como aparecen en la entrada.

El resto del conjunto de formateadores vanilla

Esta herramienta completa el conjunto de formateadores sin dependencias del sitio. Usa el formateador de JSON para objetos de JavaScript, el conversor JSON / YAML / TOML para cambiar entre formatos de configuración, el formateador de SQL para consultas legibles y el codificador de URL para las cadenas percent-encoded que aparecen dentro de atributos XML y payloads CDATA. Todos corren en el navegador sin subir nada — la misma arquitectura que esta página.

Preguntas frecuentes

¿El XML sale alguna vez de mi navegador?

No. El análisis corre por completo sobre el DOMParser integrado del navegador y el serializador es JavaScript plano de esta página. No hay endpoint de subida, ni llamada a servidor, ni nada se registra — lo que hace seguro usarlo con payloads SOAP que contienen credenciales, feeds RSS que aún no publicaste o recursos strings.xml de Android con textos sin lanzar.

¿Qué es XML «bien formado» y qué no revisa este validador?

Un documento está bien formado si cumple las reglas básicas de XML: cada elemento cerrado, nombres de etiqueta sensibles a mayúsculas, atributos entrecomillados, entidades definidas o predefinidas, exactamente un elemento raíz. Esta herramienta revisa todo eso. Lo que NO revisa es la validez contra un esquema concreto — DTD, XSD o RELAX NG — porque eso necesita el archivo del esquema y es una etapa aparte. Bien formado pero no válido significa que «el parser puede leerlo» pero que «tus reglas de negocio sobre qué elementos se permiten no están comprobadas».

¿Por qué la salida conserva <?xml version="1.0"?> cuando lo pego?

Porque DOMParser elimina silenciosamente la declaración XML al parsear — no aparece como hijo del documento en el DOM resultante — así que un round-trip ingenuo la perdería. Esta herramienta detecta la declaración en la entrada cruda, la aparta, analiza el resto y la vuelve a emitir al inicio de la salida. Es lo que la mayoría de los consumidores esperan, y en particular los clientes SOAP suelen exigirlo.

¿Cómo maneja el formateador el contenido mixto como <p>Hola <em>mundo</em>!</p>?

El contenido mixto — texto y elementos intercalados dentro del mismo padre — se queda en una sola línea. Si el formateador partiera cada hijo en su propia línea, introduciría espacios en blanco que cambian el significado renderizado del texto («Hola mundo!» pasando a «Hola\n mundo\n !»). La regla que sigue esta herramienta: si algún hijo de un elemento es un nodo de texto con contenido, ese elemento va en línea; si todos los hijos son otros elementos, se rompen por líneas con indentación. Es la convención que usa todo pretty-printer XML bien portado.

Herramientas relacionadas