Saltar al contenido

Formateador XML

Sangra tu XML con un elemento por línea o déjalo en una sola. Si no está bien formado, indica línea y columna. Conserva comentarios, CDATA y DOCTYPE.

0 caracteres · 0 líneas
Modo

0 caracteres · 0 líneas

Lo que introduces se procesa solo en este navegador y nunca se envía a un servidor. Cómo funciona

XML en una línea se formatea con saltos y sangría según sus elementos anidados

Cómo usarlo

En «Modo», «Formatear» coloca cada elemento en su propia línea y lo sangra según su nivel. La sangría se elige en la lista de debajo: «2 espacios», «4 espacios» o «Tabulador». «Minificar» elimina los saltos de línea y la sangría entre elementos y lo deja todo en una línea; en ese modo la lista de sangría desaparece.

Esta entrada, escrita toda en una sola línea, queda así al formatearla con 2 espacios:

<order id="7"><item sku="A1" qty="2">Pen</item><item sku="B2" qty="1"/><note>  keep  spaces  </note></order>
<order id="7">
  <item sku="A1" qty="2">Pen</item>
  <item sku="B2" qty="1"/>
  <note>  keep  spaces  </note>
</order>

Los elementos que solo contienen texto (item, note) se quedan en una línea y su texto se conserva con todos sus espacios. Las cifras «Líneas» y «Tamaño» de debajo miden el resultado, no la entrada, y el tamaño son los bytes en UTF-8.

Qué se conserva y qué cambia de grafía

Los comentarios (<!-- -->), las secciones CDATA (<![CDATA[ ]]>) y las instrucciones de procesamiento (<?name ?>) mantienen su contenido. Al formatear, cada uno va en su línea con la sangría que le corresponde; al minificar, solo pierden los saltos de línea de alrededor. La declaración XML inicial (<?xml version="1.0"?>) y la declaración <!DOCTYPE ...> se copian carácter a carácter, con todo lo que llevan dentro.

Con los elementos y los atributos es distinto: el navegador lee el documento y lo vuelve a escribir, así que grafías equivalentes acaban todas en la misma.

Entrada Resultado
<b></b> <b/>
<c> </c> (elemento que solo contiene espacios) sin cambios
x='1' x="1"
&apos; '
&#xE9;, &#65; é, A
&amp;, &lt;, &gt; sin cambios

La fila que merece atención es la segunda. Un elemento que solo contiene espacios no se convierte en un elemento vacío ni al formatear ni al minificar: sus espacios se quedan como están, y eso es así aunque no lleve xml:space="preserve". Si en tu documento el espacio es en sí un dato (por ejemplo, un elemento que guarda un espacio como separador), ese dato no cambia.

Las entidades que definas dentro del propio DOCTYPE también salen resueltas. Si defines <!ENTITY co "ACME"> y escribes &co; en el cuerpo, en el resultado el cuerpo dice ACME y la definición del DOCTYPE sigue en su sitio.

El contenido mixto no se trata igual al formatear que al minificar

Se llama contenido mixto al de un elemento que mezcla texto y elementos hijos, como <p>Hello <b>big</b> world <i>x</i></p>. Formatear trata cada trozo de texto como si fuera un elemento más: le da su propia línea y le recorta los espacios de los extremos.

<p>
  Hello
  <b>big</b>
  world
  <i>x</i>
</p>

Se lee mejor, pero el espacio que había entre Hello y <b> ahora es un salto de línea con sangría. En XML donde los espacios acaban en pantalla tal cual, como el texto de un documento (XHTML, DocBook y similares), usa el resultado formateado para leer y no lo guardes en lugar del original.

Minificar hace lo contrario y no toca estos elementos. Dentro de un elemento con texto mezclado deja los espacios y los saltos de línea como estaban: la entrada de arriba sale igual al minificarla, y si ocupaba varias líneas, los saltos se mantienen. Lo que Minificar elimina es la sangría de las zonas donde solo hay elementos.

Solo se comprueba la sintaxis

La herramienta únicamente verifica que el documento sea XML «bien formado» (well-formed): que cada etiqueta de apertura tenga su cierre, que los valores de los atributos vayan entre comillas, que haya un único elemento raíz. Es decir, las reglas del propio XML. Que el documento cumpla la estructura que fija un esquema DTD o XSD (qué elementos van y en qué orden, qué atributos son obligatorios) es otra cuestión, la de si es «válido» (valid), y eso aquí no se comprueba. Que salga un resultado solo quiere decir que la sintaxis es correcta.

Cuando hay un error de sintaxis, en lugar del resultado aparece un mensaje como «Este XML no está bien formado. Revisa cerca de la línea 1, columna 20.», con esa línea y una marca ^. Los ejemplos siguientes están comprobados en Chrome.

Entrada Posición indicada Causa
<a><b>1</b><c>2</b></a> línea 1, columna 20 <c> se cierra con </b>
<a>1</a><b>2</b> línea 1, columna 9 hay dos elementos raíz
<a b="1" b="2"/> línea 1, columna 15 el mismo atributo aparece dos veces
<x:a><x:b/></x:a> línea 1, columna 5 falta declarar el espacio de nombres del prefijo x (xmlns:x)
<?xml version="1.0"?> precedido de dos espacios línea 1, columna 8 hay otros caracteres antes de la declaración XML

El último caso aparece cuando, al copiar el contenido de un archivo, se cuela una línea en blanco o un espacio al principio. La declaración tiene que empezar en el primer carácter del documento.

Documentos con entidades externas

Si el DOCTYPE define una entidad que apunta a un archivo externo, los lugares que hacen referencia a esa entidad pueden quedar vacíos en el resultado.

En Chrome, al formatear <!DOCTYPE a [<!ENTITY e SYSTEM "http://example.invalid/e.txt">]><a>&e;</a>, el DOCTYPE se conserva y el cuerpo se queda en <a/>. El punto donde se hacía referencia a la entidad externa queda vacío sin que salte ningún error, así que si guardas el resultado en lugar del original, esa referencia se pierde. Cuando el DOCTYPE declara una entidad externa, debajo del resultado aparece un aviso que lo indica.

Fuentes

Preguntas frecuentes

Pego HTML y me da error. ¿Por qué?

Porque hay cosas que HTML tolera y que en XML son errores de sintaxis. Las más típicas: etiquetas sin cerrar como <br>, entidades que XML no define como &nbsp; y atributos con el valor sin comillas (x=1). Para que se lea como XML hay que escribirlos <br/>, &#160; y x="1". Un & suelto en el texto falla por la misma razón y tiene que ir como &amp;.

En la línea que marca el error no hay nada mal. ¿Dónde tengo que mirar?

La posición indicada es el punto en el que el navegador se da cuenta del problema, y la causa puede estar más arriba. Por ejemplo, si en la línea 3 dejas un <c> sin cerrar, Chrome señala la línea 4, que es donde aparece el </a> del elemento que lo contiene. Parte de la etiqueta de cierre de la línea marcada y ve subiendo hasta dar con su pareja. Solo se muestra el primer error que se encuentra, y si el navegador no da la posición, el mensaje sale sin línea ni columna.

¿Qué pasa si la declaración XML indica una codificación que no es UTF-8, como encoding="ISO-8859-1"?

La declaración se conserva tal cual al principio del resultado. Pero el archivo que obtienes con Descargar se guarda en UTF-8, diga lo que diga la declaración. Si lo usas sin más, la declaración y la codificación real no coinciden: cambia el valor de encoding a UTF-8 o vuelve a guardar el archivo en su codificación original. Con una declaración así, debajo del resultado aparece también un aviso que dice lo mismo. Si en lugar de descargar copias el resultado y lo pegas en el archivo de origen, manda la codificación con la que guarde tu editor.

Última actualización: