Formatador XML

Cole XML e ele se organiza — texto e atributos permanecem intactos.

Como usar

  1. Cole seu XML na caixa — ele é formatado enquanto você digita, sem botão para clicar.
  2. Escolha Formatar ou Minificar e 2 ou 4 espaços de indentação; o resultado é atualizado imediatamente.
  3. Se a estrutura estiver quebrada, a mensagem indica a linha, a coluna e o elemento. Copie o resultado ou baixe-o como arquivo .xml.

Exemplo

Entrada

<?xml version="1.0" encoding="UTF-8"?><pedido id="A-1042"><cliente><nome>Ana Clara</nome><email>ana@exemplo.com.br</email></cliente><itens><item sku="X-1" qtd="2">Engrenagem da máquina analítica</item><item sku="X-2" qtd="1">Conjunto de cartões perfurados</item></itens></pedido>

Formatado

<?xml version="1.0" encoding="UTF-8"?>
<pedido id="A-1042">
  <cliente>
    <nome>Ana Clara</nome>
    <email>ana@exemplo.com.br</email>
  </cliente>
  <itens>
    <item sku="X-1" qtd="2">Engrenagem da máquina analítica</item>
    <item sku="X-2" qtd="1">Conjunto de cartões perfurados</item>
  </itens>
</pedido>

Apenas as regras padrão: um elemento por linha, dois espaços por nível. A ordem dos atributos, as aspas e os valores ficam intactos, assim como o texto dentro de <nome>.

Regras, limites e problemas conhecidos

  • Apenas verificação de estrutura: pareamento de tags, aspas/duplicação/separação de atributos, nomes de elementos e atributos, sintaxe de entidades. Sem validação DTD ou XSD, sem expansão de entidades, sem verificação de vinculação de prefixos de namespace.
  • Apenas espaços estruturais são reescritos — o espaço entre atributos e o espaço que compõe um elemento sem texto. Ordem de atributos, estilo de aspas, valores, entidades, comentários, CDATA e o subconjunto interno do DOCTYPE são copiados caractere por caractere.
  • Conteúdo misto nunca é reindentado: em <p>Oi <b>aí</b>!</p> o espaçamento fica como digitado, porque acrescentar quebras de linha mudaria o texto. O mesmo vale para xml:space="preserve", copiado literalmente.
  • Elementos vazios mantêm a forma que você digitou: <a></a> não é reduzido a <a/>, e <a/> não é expandido. Atributos não são ordenados e aspas não são unificadas.
  • Minificar apaga apenas espaços estruturais. Espaços no texto, comentários, CDATA e o DOCTYPE são mantidos — nada é removido do seu conteúdo.
  • Uma tag, comentário, CDATA ou DOCTYPE não fechado bem no fim da entrada é reportado como aviso, não erro: você ainda recebe um resultado. Erros reais (tags incompatíveis, valores de atributo sem aspas, um “&” solto) são erros com linha e coluna.
  • Um fragmento (vários elementos de nível superior, ou texto fora da raiz) é formatado e reportado como fragmento. Entrada sem nenhum elemento é erro.
  • Números de linha e coluna contam pontos de código Unicode, então um emoji é uma coluna. Apenas espaço, tabulação, avanço de linha e retorno de carro contam como espaço em branco; U+3000 ou U+00A0 dentro do texto é conteúdo e nunca é removido.
  • Sem HTML: tags de fechamento omitidas como </li> ou <br> são reportadas como não fechadas. Sem upload de arquivo, sem parâmetros de URL, sem histórico, sem visão em árvore, sem XML→JSON. Tudo roda no seu navegador: nada é enviado ou armazenado.
  • Acima de 200.000 caracteres o resultado é atualizado cerca de 0,6 s depois de você parar de digitar; o texto nunca é truncado. A saída usa LF e não termina com quebra de linha; a formatação é idempotente.

O que as pessoas costumam precisar depois que a estrutura está legível.