Cómo formatear un XML
- Pega el XML en la caja: el de una factura CFDI o Facturae, una petición o respuesta SOAP, un sitemap, un
pom.xmlde Maven, un layout de Android o un SVG. Se revisa y se formatea mientras pegas. - Elige Formatear para poner cada elemento en su propia línea, con sangría de 2 espacios, 4 espacios o tabulador, o Minificar para quitar los espacios entre etiquetas.
- Pulsa Copiar junto al resultado, o Descargar para guardarlo como archivo.
- Si el XML no está bien formado, ves el problema, su línea y su columna, la línea misma con un ^ debajo del punto y cómo arreglarlo. En cuanto lo corriges, aparece el XML formateado.
Leer el XML de una factura CFDI
El XML de un CFDI suele llegar en una sola línea, con la mayor parte de los datos en atributos larguísimos. Formateado, cada nodo queda en su nivel: cfdi:Comprobante con la serie, el folio, la fecha, los totales y el método de pago; cfdi:Emisor y cfdi:Receptor con su RFC, régimen fiscal y uso del CFDI; un cfdi:Concepto por partida dentro de cfdi:Conceptos; cfdi:Impuestos; y en el archivo timbrado, cfdi:Complemento con el tfd:TimbreFiscalDigital, donde está el UUID (folio fiscal). Así encuentras rápido el importe de una partida, la clave de producto o servicio o el régimen del receptor.
El ejemplo de la caja es un fragmento simplificado de CFDI 4.0 —sin sello, certificado ni timbre, y sin los impuestos por concepto—, así que no es una factura válida. Tiene 920 bytes en una línea; formateado con 2 espacios queda así:
<?xml version="1.0" encoding="UTF-8"?>
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/4" Version="4.0" Serie="A" Folio="1024" Fecha="2026-10-16T10:30:00" SubTotal="500.00" Moneda="MXN" Total="580.00" TipoDeComprobante="I" Exportacion="01" MetodoPago="PUE" LugarExpedicion="06000">
<cfdi:Emisor Rfc="AAA010101AAA" Nombre="PANADERIA EJEMPLO" RegimenFiscal="601"/>
<cfdi:Receptor Rfc="XAXX010101000" Nombre="PUBLICO EN GENERAL" DomicilioFiscalReceptor="06000" RegimenFiscalReceptor="616" UsoCFDI="S01"/>
<cfdi:Conceptos>
<cfdi:Concepto ClaveProdServ="01010101" Cantidad="10" ClaveUnidad="H87" Descripcion="Pan dulce (conchas)" ValorUnitario="50.00" Importe="500.00" ObjetoImp="02"/>
</cfdi:Conceptos>
<cfdi:Impuestos TotalImpuestosTrasladados="80.00">
<cfdi:Traslados>
<cfdi:Traslado Base="500.00" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="80.00"/>
</cfdi:Traslados>
</cfdi:Impuestos>
</cfdi:Comprobante>
Son 8 elementos con 33 atributos en 4 niveles. Como los datos del CFDI van en atributos, la sangría solo añade 42 bytes; minificado vuelve a 920 bytes. Los valores quedan exactamente igual: 0.160000 conserva sus seis decimales y los atributos mantienen su orden.
Guarda y envía el original timbrado
El sello digital del CFDI se calcula sobre la cadena original —los valores de los atributos—, y el formateador no cambia ningún valor. Aun así, el archivo con validez fiscal es el XML original que devolvió el PAC al timbrar: consérvalo y envíalo tal cual, y usa la copia formateada solo para leerla o encontrar un error. En documentos firmados con XMLDSig, como Facturae en España, SAML o muchos mensajes SOAP, la firma cubre el texto exacto, incluidos los espacios entre etiquetas, así que una copia formateada o minificada ya no coincide con su firma.
Bien formado no es lo mismo que válido
Esta página revisa la sintaxis de XML 1.0 y de los espacios de nombres: un único elemento raíz; cada etiqueta abierta cerrada por la que corresponde, en orden y con las mismas mayúsculas; valores de atributos entre comillas y sin atributos repetidos; & y < escritos como & y <; cada prefijo como cfdi: declarado con xmlns:cfdi="…"; y la declaración <?xml … ?>, si la hay, al principio del archivo. No valida contra los esquemas XSD del SAT, no comprueba el sello ni el timbre y no consulta si el CFDI está vigente o cancelado: para eso está el servicio de verificación de CFDI del SAT o el validador de tu proveedor. El error más común en XML armado a mano es el & sin escapar:
<cfdi:Emisor Nombre="Tacos & Más"/>
^
Aquí aparece & sin escapar en la línea 2, columna 30: el nombre “Tacos & Más” debe escribirse Tacos & Más.
Qué cambia el formateador y qué nunca toca
Solo los elementos que contienen únicamente otros elementos reciben saltos de línea, porque solo ahí los espacios entre etiquetas no significan nada. Todo lo demás se copia carácter por carácter:
- El texto de los elementos, incluidos los espacios al principio o al final.
- El contenido mixto —texto y etiquetas en el mismo elemento— queda como está, porque un salto de línea ahí pasaría a ser parte del texto.
- Los elementos con
xml:space="preserve", con todo lo que contienen. - Las secciones CDATA, los comentarios, las instrucciones de procesamiento y el DOCTYPE.
- Las referencias:
&sigue siendo&yñno se convierte en ñ. - Los valores, las comillas y el orden de los atributos. Dentro de la etiqueta se ordena el espaciado: un espacio antes de cada atributo y ninguno alrededor del
=.
Los saltos de línea de Windows (CR LF) se escriben como LF, que es como los lee cualquier analizador de XML.
Límites y consejos
- La ñ y los acentos: la página trabaja con los caracteres que pegas y Descargar guarda en UTF-8, la codificación que usa el CFDI. Si un XML de otro sistema declara
encoding="ISO-8859-1", cámbialo aUTF-8en el archivo descargado o las letras con tilde se leerán mal. - Archivos grandes: una factura de 200 KB con cientos de conceptos se revisa y formatea en mucho menos de un segundo, y el resultado largo se desplaza con fluidez.
- HTML no es XML. Etiquetas como
<br>sin barra son un error aquí. Para JSON usa el formateador de JSON, y para ver qué cambió entre dos versiones de un XML, formatea ambas y compáralas con el comparador de textos.
Tu XML se queda en tu dispositivo
La lectura, la revisión y el formato se hacen en tu navegador. Las facturas llevan RFC, nombres, domicilios e importes; nada de eso se sube ni se registra, y tampoco se guarda: al recargar la página, la caja queda vacía.
Preguntas frecuentes
¿Se sube mi XML a un servidor?
No. El formateador es JavaScript que se ejecuta en tu navegador, así que el archivo no sale de tu dispositivo, y la página sigue funcionando sin conexión una vez cargada.
¿Esta página valida mi CFDI?
Comprueba que el XML esté bien formado, la sintaxis que exige cualquier lector de XML. No lo valida contra los esquemas XSD del SAT, no verifica el sello ni el timbre y no consulta su estatus. Para eso usa el servicio de verificación de CFDI del SAT o el validador de tu PAC.
¿Puedo formatear una factura y luego enviarla?
Envía siempre el XML original timbrado: es el que tiene validez fiscal. Usa la versión formateada solo para leerla. En XML firmados con XMLDSig, como Facturae, la firma cubre el texto exacto, espacios incluidos, y una copia formateada ya no la supera.
¿Por qué aparece “& sin escapar”?
En XML el & inicia una referencia como & o ñ. Un & suelto —en una razón social como “Tacos & Más”, una descripción o una URL con varios parámetros— debe escribirse &.
¿Por qué algunos elementos quedan en una sola línea?
Un elemento que contiene texto —solo o mezclado con etiquetas— se copia tal cual, porque añadir saltos de línea o espacios dentro cambiaría el texto. Solo los elementos que contienen únicamente otros elementos se reparten en varias líneas.
Última actualización: 16 de octubre de 2026