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" |
' |
' |
é, A |
é, A |
&, <, > |
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.
