Formatador e Validador XML
Formate, valide ou minifique XML na hora no seu navegador — o resultado se atualiza ao vivo.
Seu documento fica no seu aparelho
Nada para apagar depois
Seguro para documentos regulados
Funciona em todo navegador moderno
Como funciona
- 1
Cole seu XML
Um arquivo de configuração, uma resposta de API, uma nota fiscal, um feed ou uma exportação que precisa ler.
- 2
Formate ou minifique
Indente para ler, ou comprima de volta — os avisos aparecem nos dois casos.
- 3
Copie o resultado
Leve para um editor, um chamado, uma massa de teste ou um documento que está prestes a enviar.
Por que usar esta ferramenta
Avisa quando formatar muda os dados
Indentar um elemento que carrega texto altera esse texto, e você fica sabendo antes em vez de depois.
Prefixos de namespace preservados
Os prefixos ficam como foram escritos, então as expressões XPath e as folhas XSLT continuam funcionando.
Entidades externas nunca resolvidas
Nenhum arquivo é lido e nenhuma URL é buscada, que é a propriedade de que uma ferramenta XML mais precisa.
Bombas de expansão recusadas
Um documento pequeno que se abre em gigabytes é detectado e recusado em vez de congelar a aba.
Declaração e codificação mantidas
A declaração XML, seu atributo de codificação e qualquer marca de ordem de bytes saem do processo iguais.
Nada sai do navegador
Notas fiscais, mensagens SOAP e asserções de identidade são processadas nesta página e não vão a lugar nenhum.
Indentar XML não é cosmético — espaço dentro de um elemento é dado
Este é o fato que separa a formatação de XML da de JSON, e quase toda surpresa neste assunto decorre dele. Em JSON, o espaço entre os tokens fica inteiramente fora do modelo de dados: reformate um documento e todo valor que o seu parser ler continua idêntico. XML não dá essa garantia. O conteúdo de um elemento é um nó de texto, e o espaço faz parte desse nó a menos que algo diga explicitamente o contrário. Transforme `<nome>Ali</nome>` numa forma indentada com o texto na própria linha e o elemento não contém mais `Ali` — contém uma quebra de linha, dois espaços, `Ali`, outra quebra e mais espaços. A maior parte do código de aplicação esconde isso aparando na leitura, e é exatamente por isso que passa despercebido até o momento em que importa: um valor comparado com o banco, uma soma de verificação, uma assinatura. A especificação do XML oferece `xml:space="preserve"` para declarar que o espaço é significativo, e um schema pode marcar um elemento como insensível a espaço, mas um formatador que só enxerga o documento não conhece nenhum dos dois. Ele precisa avisar em vez de supor, e é o que este faz.
Reformatar um documento assinado invalida a assinatura, e isso é por projeto
A consequência acima vira concreta no instante em que um documento é assinado. Assinaturas digitais XML não assinam o arquivo — assinam uma forma canônica da árvore do documento, produzida por uma etapa de normalização definida na especificação Canonical XML. Essa etapa fixa a ordem dos atributos, as declarações de namespace e certo espaço em branco, para que dois documentos que significam a mesma coisa produzam o mesmo resumo. O que ela não faz é perdoar o espaço que você acrescentou dentro do conteúdo de um elemento, porque para o modelo isso não é formatação, é mudança de dado. Então uma nota fiscal assinada, uma asserção SAML ou uma mensagem SOAP embelezada não é mais válida, e a falha é total: a verificação não relata uma pequena divergência, relata que a assinatura não confere. A regra a levar é que um documento assinado é um objeto binário vestido de texto. Leia formatado se quiser, mas envie os bytes que recebeu.
NF-e: o maior sistema de XML assinado do mundo, e o que ele ensina
Poucos lugares tornam este assunto tão imediatamente prático quanto o Brasil. A Nota Fiscal Eletrônica é XML assinado digitalmente, emitido aos bilhões, e o mesmo vale para NFC-e, CT-e, MDF-e e os eventos de cancelamento e carta de correção. Isso faz do Brasil, na prática, o maior consumidor de XML assinado do planeta — e faz com que as duas seções anteriores deixem de ser teoria e virem a causa cotidiana de uma rejeição. Primeiro: a assinatura fica dentro do próprio arquivo, então abrir o XML num editor que reindenta ao salvar invalida a nota sem que nada apareça na tela; o arquivo continua legível, continua bem formado, e é recusado. Segundo: a assinatura cobre uma forma canônica, e é justamente por isso que a especificação exige que a NF-e seja transmitida sem quebras de linha e sem indentação entre as tags — não por economia de bytes, mas porque qualquer espaço acrescentado dentro do conteúdo de um elemento muda o dado que foi assinado. Daí o hábito correto: guarde o arquivo original intacto, formate uma cópia só para ler, e transmita sempre o que você recebeu. E lembre que uma NF-e traz CNPJ, endereço e itens de um cliente — motivo bastante para não colá-la no servidor de terceiros.
O prefixo do namespace não é o nome — a URI é
Namespaces são onde o projeto do XML mais surpreende quem vem de JSON, e onde um formatador descuidado causa estrago de verdade. Um prefixo como `soap:` ou `ns2:` é uma abreviação local sem significado próprio; o que identifica um elemento é a URI à qual esse prefixo está ligado. Dois documentos usando `a:Body` e `env:Body` são idênticos se ambos os prefixos estiverem ligados à mesma URI de namespace, e dois documentos usando ambos `ns:Item` não têm relação nenhuma se as URIs diferem. É por isso que uma ferramenta que gentilmente renomeia prefixos para algo mais arrumado produz um documento tecnicamente equivalente e praticamente quebrado: toda expressão XPath, todo template XSLT e todo seletor escrito à mão no seu código se refere ao prefixo, não à URI, porque é o que as pessoas escrevem. Namespaces padrão acrescentam uma segunda armadilha, já que um elemento sem prefixo dentro de `xmlns="…"` está naquele namespace enquanto um atributo sem prefixo não está em namespace nenhum. Esta ferramenta não muda prefixo algum nem move declaração alguma.
Expansão de entidades é por que se precisa dizer a um parser XML o que ele não deve fazer
XML permite que um documento defina suas próprias entidades e que uma entidade referencie outra. Só esse recurso produz a negação de serviço mais conhecida da história do formato: defina uma entidade como dez cópias de outra, aninhe isso dez níveis e um documento de algumas centenas de bytes se abre em um bilhão de caracteres. Tem nome — o ataque do bilhão de risadas — e funciona em qualquer parser que expanda entidades sem orçamento. O problema mais afiado são as entidades externas, que deixam um documento declarar que o valor de uma entidade deve ser lido de algum lugar: `SYSTEM "file:///etc/passwd"` lê um arquivo local, e uma URL `http://` transforma o parser num cliente de requisições que vai alegremente entrar numa rede privada em nome de um atacante. Isso é XXE, e há anos é usado para ler credenciais de servidores de produção. A defesa não é parsing esperto, é recusa: um processador que nunca resolve entidade externa não pode ser levado a buscar nada. Esta ferramenta não resolve nenhuma e limita a expansão, e por isso um documento hostil aqui é apenas recusado.
O que existe de fato dentro do XML que as pessoas precisam formatar
Vale nomear os documentos, porque a lista explica a cautela. XML é onde mora a parte regulada do mundo do software: notas fiscais enviadas a uma administração tributária, mensagens SOAP circulando entre bancos, asserções SAML que são literalmente a identidade de alguém em trânsito, prontuários, peças judiciais, exportações de folha de pagamento, feeds de produto com preços ainda não divulgados. Quando alguém abre um formatador, é quase sempre porque um desses documentos falhou e precisa ser lido — ou seja, o exemplo na área de transferência é real, com o CNPJ do cliente e o sujeito da asserção dentro. Colar isso num formatador hospedado envia exatamente aquilo, e uma asserção SAML em particular é uma credencial ao portador enquanto continuar válida. Esta página faz o parsing e a impressão do documento em JavaScript e não emite nenhuma requisição enquanto isso; o painel de rede das suas ferramentas de desenvolvedor mostrará o mesmo.
Erros comuns que vale evitar
- Supor que formatar XML é seguro como formatar JSON. Espaço dentro de um elemento faz parte do nó de texto, então indentar muda os valores que um parser lê de volta.
- Embelezar um documento assinado. Assinaturas cobrem uma forma canônica da árvore, e espaço acrescentado no conteúdo de um elemento é mudança de dado — a verificação falha por inteiro.
- Abrir uma NF-e num editor que reindenta ao salvar. A assinatura está dentro do próprio arquivo, então a nota é invalidada sem que nada apareça na tela.
- Deixar uma ferramenta renomear prefixos de namespace. A URI é a identidade, mas todo XPath e XSLT do seu código se refere ao prefixo.
- Fazer parsing de XML não confiável com entidades externas ativadas. `SYSTEM "file:///…"` lê arquivos locais e uma URL http faz o parser buscar em nome de um atacante — isso é XXE.
Comparação
| Item | Esta ferramenta | Formatadores online | Um plugin de editor |
|---|---|---|---|
| Documento enviado a um servidor | Nunca | Geralmente sim | Não |
| Avisa quando indentar muda os dados | Sim | Não | Raramente |
| Resolve entidades externas | Nunca | Às vezes | Configurável |
| Preserva prefixos de namespace | Sempre | Geralmente | Geralmente |
| Mantém declaração e marca de ordem de bytes | Sim | Varia | Geralmente |
| Preço | Grátis | Grátis / planos pagos | Grátis |
Recursos
Formatação e minificação
Os dois sentidos, com a largura da indentação sob seu controle e tabulações onde um projeto exigir.
Verificação de boa formação
Tags desbalanceadas, e comerciais soltos e nomes inválidos são reportados com a linha e a coluna.
Avisos de segurança de espaço
Elementos com conteúdo misto ou texto significativo são marcados antes que a indentação os reescreva.
Ordem dos atributos intocada
Os atributos ficam na ordem do documento, porque alguns consumidores e algumas assinaturas dependem disso.
CDATA e comentários preservados
As seções são mantidas literalmente, inclusive o conteúdo que de outro modo precisaria de escape.
Documentos grandes suportados
Uma exportação de vários megabytes formata sem upload nem teto de tamanho.
Nada para instalar
Sem ferramenta de build, sem runtime, sem dependências — funciona na página web.
Compatível com árabe e RTL
Interface completa em oito idiomas, incluindo árabe da direita para a esquerda.
Seguro por padrão
Servido por HTTPS, sem rastreio de conteúdo e sem envio a terceiros.
Quem usa
Desenvolvedores de integração
Ler uma resposta SOAP que chegou numa única linha sem quebras.
Times fiscais e de faturamento
Inspecionar uma nota fiscal eletrônica que a SEFAZ rejeitou.
Administradores de sistemas
Arrumar um arquivo de configuração antes de mandá-lo ao controle de versão.
Quem depura uma API
Achar o único e comercial sem escape que impediu o documento de ser lido.
Perguntas Frequentes
Não. Tudo roda localmente no seu navegador — seu texto nunca é enviado, armazenado ou compartilhado.
Sim — totalmente grátis, sem conta e sem limites.