Como formatar um XML
- Cole o XML na caixa — o de uma NF-e, NFC-e ou CT-e, uma requisição ou resposta SOAP, um sitemap, um
pom.xmldo Maven, um layout do Android ou um SVG. Ele é conferido e formatado enquanto você cola. - Escolha Formatar para pôr cada elemento na sua linha, com recuo de 2 espaços, 4 espaços ou tab, ou Minificar para tirar os espaços entre as tags.
- Toque em Copiar ao lado do resultado, ou em Baixar para salvar como arquivo.
- Se o XML não estiver bem formado, você vê o problema, a linha, a coluna, a própria linha com um ^ embaixo do ponto e como corrigir. Corrigiu, o XML formatado aparece na hora.
Ler o XML de uma NF-e
O XML de uma nota fiscal eletrônica chega em uma linha só, com milhares de caracteres — impossível de ler no Bloco de Notas. Formatado, cada grupo do leiaute aparece no seu nível: ide (identificação da nota), emit e dest (emitente e destinatário), um det por item com o prod e os impostos, total, transp, e no fim a assinatura (Signature) e, no arquivo autorizado, o protocolo da SEFAZ (protNFe). Fica fácil achar o valor de um item, conferir o CFOP ou o NCM, ou ver por que um sistema recusou o arquivo.
O exemplo da caixa é um trecho simplificado no leiaute 4.00 — sem assinatura e com vários campos obrigatórios omitidos, então não é uma nota válida —, com 547 bytes em uma linha. Formatado com 2 espaços, fica assim:
<?xml version="1.0" encoding="UTF-8"?>
<nfeProc versao="4.00" xmlns="http://www.portalfiscal.inf.br/nfe">
<NFe>
<infNFe versao="4.00">
<ide>
<cUF>35</cUF>
<natOp>Venda de mercadoria</natOp>
<mod>55</mod>
</ide>
<emit>
<xNome>Padaria Exemplo Ltda</xNome>
<enderEmit>
<xMun>São Paulo</xMun>
<UF>SP</UF>
</enderEmit>
</emit>
<det nItem="1">
<prod>
<cProd>001</cProd>
<xProd>Pão de queijo congelado 1 kg</xProd>
<qCom>2.0000</qCom>
<vUnCom>32.9000000000</vUnCom>
<vProd>65.80</vProd>
</prod>
</det>
<total>
<ICMSTot>
<vNF>65.80</vNF>
</ICMSTot>
</total>
</infNFe>
</NFe>
</nfeProc>
São 22 elementos em 6 níveis. Os valores ficam exatamente como estavam — 32.9000000000 continua com as dez casas decimais do leiaute, com ponto, e “Pão de queijo” mantém o ã. O recuo acrescenta 252 bytes; minificado de novo, volta a 547 bytes.
Não envie o XML formatado
A NF-e, o CT-e e a NFC-e são assinados digitalmente (XMLDSig) com o certificado da empresa, e a assinatura cobre o texto do grupo infNFe. Espaços e quebras de linha novos entre as tags mudam esse texto, então uma cópia formatada deixa de bater com a assinatura e é rejeitada pelo web service da SEFAZ — e também por sistemas que conferem a assinatura ao importar a nota. Formate para ler ou para achar um erro, mas guarde e envie sempre o arquivo original. Pelo mesmo motivo, não minifique um XML assinado.
Bem formado não é o mesmo que válido
Esta página confere a sintaxe do XML 1.0 e dos namespaces: um único elemento raiz; cada tag aberta fechada pela tag certa, na ordem certa e com as mesmas maiúsculas; valores de atributos entre aspas e sem atributo repetido; & e < no texto escritos como & e <; todo prefixo como ds: declarado; e a declaração <?xml … ?>, se houver, logo no começo. Ela não valida a nota contra os schemas XSD publicados no Portal da NF-e, não confere a assinatura nem consulta a SEFAZ: um XML bem formado ainda pode ser rejeitado por um campo fora do leiaute. O erro mais comum em XML montado à mão é o & sem escape:
<xNome>Pão & Cia</xNome>
^
Aqui aparece & sem escape na linha 2, coluna 14: o nome “Pão & Cia” precisa ser escrito Pão & Cia.
O que a formatação muda — e o que nunca toca
Só elementos que contêm apenas outros elementos ganham quebras de linha, porque só ali os espaços entre as tags não têm significado. O resto é copiado caractere por caractere:
- O texto dos campos, inclusive espaços no começo ou no fim.
- Conteúdo misto — texto e tags no mesmo elemento — fica como está, porque uma quebra de linha ali viraria parte do texto.
- Elementos com
xml:space="preserve", com tudo o que há dentro. - Seções CDATA, comentários, instruções de processamento e o DOCTYPE.
- Referências:
&continua&eçnão vira ç. - Valores, aspas e ordem dos atributos. Dentro da tag, o espaçamento é arrumado: um espaço antes de cada atributo e nenhum em volta do
=.
Quebras de linha do Windows (CR LF) saem como LF, como todo leitor de XML já as interpreta.
Limites e dicas
- Acentos: o leiaute da NF-e usa UTF-8, e o Baixar salva em UTF-8. Se um XML de outro sistema declarar
encoding="ISO-8859-1", troque paraUTF-8no arquivo baixado, ou os acentos serão lidos errado. - Arquivos grandes: uma nota de 200 KB com centenas de itens é conferida e formatada em bem menos de um segundo, e o resultado longo rola sem travar.
- HTML não é XML. Tags como
<br>sem barra são erro aqui; para páginas web use o formatador de HTML. Para JSON, o formatador de JSON; para ver o que mudou entre duas versões de um XML, formate as duas e use o comparador de textos.
O seu XML fica no seu aparelho
A leitura, a conferência e a formatação rodam no navegador. Notas fiscais trazem CNPJ, CPF, endereços e valores; nada disso é enviado nem registrado, e também não é salvo: ao recarregar a página, a caixa fica vazia.
Perguntas frequentes
O meu XML é enviado para algum servidor?
Não. O formatador é JavaScript que roda no seu navegador, então o arquivo não sai do seu aparelho, e a página continua funcionando offline depois de carregada.
Esta página valida a minha NF-e?
Ela confere se o XML está bem formado — a sintaxe que todo leitor de XML exige. Não valida contra os schemas XSD da NF-e, não confere a assinatura digital e não consulta a SEFAZ. Para isso use o validador do seu emissor ou o retorno do próprio web service.
Posso formatar a NF-e e depois enviar?
Não. A assinatura digital cobre o texto exato da nota, espaços incluídos, então a cópia formatada falha na conferência da assinatura. Use a versão formatada só para ler, e guarde e envie o arquivo original.
Por que aparece “& sem escape”?
No XML o & inicia uma referência como & ou ç. Um & sozinho — numa razão social como “Pão & Cia”, numa descrição de produto ou numa URL com vários parâmetros — precisa ser escrito &.
Por que alguns elementos ficam numa linha só?
Um elemento que contém texto — sozinho ou misturado com tags — é copiado exatamente como está, porque quebras de linha ou espaços dentro dele mudariam o texto. Só elementos que contêm apenas outros elementos são espalhados em várias linhas.
Última atualização: 16 de outubro de 2026