ToolActToolAct

Ferramenta de Formatação XML

XML de Entrada
Saída Formatada
Linhas: 1Caracteres: 0Bytes: 0
Linhas: 1Caracteres: 0

O que é Formatação XML?

O formatador XML transforma XML compacto ou bagunçado em uma estrutura indentada e legível. XML aparece em arquivos de configuração, mensagens SOAP, sitemaps, feeds RSS, documentos de escritório, artefatos de build e muitas integrações corporativas antigas, onde uma tag de fechamento ausente ou um caractere mal escapado pode interromper o processamento. A ferramenta ajuda a enxergar elementos aninhados, atributos, nós de texto, namespaces e possíveis pontos de erro com mais rapidez do que ler uma linha comprimida. Ela é útil para depuração, documentação, comparação e ensino, mas não substitui validação por XSD, contrato de API ou formato exigido por parceiros.

Como usar

Como usar

  1. Cole ou insira dados XML na caixa de entrada à esquerda
  2. Selecione o tamanho da indentação (2 espaços, 4 espaços ou Tab)
  3. Clique em Format para embelezar ou Minify para remover espaços em branco
  4. Os resultados são exibidos à direita com destaque de sintaxe
  5. Clique em Copy ou Download para salvar o resultado

Notas sobre XML

  • A formatação altera o espaçamento, não o significado do documento, mas o espaço em branco ainda pode ser relevante em nós de texto e documentos de conteúdo misto.
  • Se a análise falhar, verifique tags não fechadas, aninhamento incorreto, atributos duplicados e caracteres sem escape, como o e comercial (&).

Casos de uso

Reformate XML compacto após validar que ele faz parse corretamenteCole um feed, mensagem SOAP, sitemap, fragmento SVG ou resposta de dispositivo minificado e o parser XML do navegador verifica antes de produzir a saída. XML válido é então expandido com 2 espaços, 4 espaços ou tabs para facilitar bastante a inspeção dos elementos aninhados.
Mantenha declarações XML, comentários, CDATA e tags de auto-fechamento legíveisO formatador trata instruções de processamento, comentários, blocos CDATA, declarações, tags de fechamento, nós de texto e tags de auto-fechamento separadamente, em vez de tratar o documento como texto puro. Arquivos de configuração e exemplos de integração mantêm suas seções XML especiais visíveis.
Crie XML legível ou um payload compacto para entregaUse o modo de formatação ao revisar a hierarquia e o modo minificar ao preparar um payload menor para exemplos, fixtures de teste ou transporte. Erros de parse são exibidos com informações de linha e coluna disponíveis, enquanto validação de schema e verificações de regras de negócio permanecem sob responsabilidade do sistema XML de destino.
Localize uma tag ausente pela posição do erro do parserQuando a página reporta uma falha de parse, anote a linha e a coluna e procure logo acima uma tag pai não fechada ou uma tag de fechamento solta. O formatador apenas corrige espaços em branco, então uma correção estrutural real ainda precisa ser editada manualmente no código antes de reformatar. A abreviação de auto-fechamento como `
` (um recurso SGML aceito pelo XML 1.0 §3.1) é preservada como está, então elementos vazios de HTML que circulam dentro de XHTML ou RSS devem manter a barra; usar `

` em vez disso alterará silenciosamente a página renderizada em parsers HTML5. Seções CDATA, incluindo a regra literal do terminador `]]>`, também são mantidas intactas em vez de serem convertidas em entidades `&`.
Organize um fragmento SVG antes de incorporá-lo no markupCole um SVG em uma única linha, expanda com indentação de 2 espaços e verifique se os dados de path, viewBox e declarações de namespace estão intactos. O SVG reformatado pode ser incorporado ao HTML sem quebrar o formato, e a hierarquia facilita a depuração de atributos de transformação ou gradiente posteriormente. Segundo a especificação W3C XML 1.0, a ordem dos atributos em um elemento não é canônica, então reorganizar pode mover id e classe para uma posição diferente da original. Qualquer prefixo de namespace declarado como xmlns:svg no elemento raiz svg deve permanecer lá, caso contrário o navegador não reconhecerá os filhos. A declaração XML começando com <?xml version é opcional para SVG inline em HTML, mas obrigatória para feeds XML independentes.

Princípio técnico

A formatação XML é fundamentada na recomendação W3C XML 1.0 (Quinta Edição). A análise ocorre por meio de `new DOMParser().parseFromString(src, 'application/xml')` (ou `text/xml`), que retorna um Document cujos nós correspondem às sete produções definidas na especificação: Element, Attr, Text, CDATASection, Comment, ProcessingInstruction e DocumentType. Ao contrário do HTML, os parsers XML são estritos: uma tag incompatível, um `&` não escapado ou um atributo duplicado aborta a análise e o DOMParser retorna um elemento `<parsererror>` cujo corpo contém a linha e a coluna. Equivalentes no lado do servidor incluem libxml2 (`xmllint --format`), `xml.etree.ElementTree` do Python, StAX/SAX do Java e `XmlReader` do .NET. O serializador percorre o DOM nó por nó: cada Element abre em sua própria linha com depth*indent espaços, os filhos recursam com depth+1, a tag de fechamento alinha com a tag de abertura e elementos vazios colapsam para a forma auto-fechante `<foo/>` que a seção §3.1 da especificação declara semanticamente equivalente a `<foo></foo>`. Cinco entidades predefinidas são sempre recodificadas em valores de texto e atributo: `&amp;` `&lt;` `&gt;` `&quot;` `&apos;`. Seções CDATA (`<![CDATA[ ... ]]>`) são preservadas literalmente porque são a válvula de escape explícita para conteúdo que de outra forma precisaria de codificação de entidades; o terminador `]]>` não pode aparecer dentro de um bloco CDATA conforme §2.7, o que o parser impõe. Instruções de processamento como `<?xml-stylesheet?>` e a declaração XML `<?xml version="1.0" encoding="UTF-8"?>` são mantidas no prólogo do documento. A declaração DOCTYPE é preservada como uma única string. Duas sutilezas impulsionam a maior parte da complexidade do formatador. Primeiro, conteúdo misto — um elemento contendo tanto texto quanto elementos filhos, como `<p>Hello <b>world</b>!</p>` — não pode ser re-indentado sem alterar o infoset do documento, porque cada caractere de espaço em branco nesse contexto é um nó Text significativo. Os formatadores detectam conteúdo misto verificando se um Element possui algum filho Text que não seja espaço em branco e mudam para uma serialização em linha única para essa subárvore. Segundo, declarações de namespace (`xmlns`, `xmlns:prefix`) devem permanecer no elemento onde foram declaradas pela primeira vez; movê-las altera o escopo. A ordem dos atributos não é canônica conforme a especificação, então a maioria dos formatadores aplica ordenação alfabética enquanto preserva quaisquer declarações `xmlns:*` iniciais. A análise e a serialização são O(n) sobre o comprimento do documento; feeds muito grandes normalmente são processados via streaming com SAX em vez de construir um DOM na memória.

  • Especificação: W3C XML 1.0 Quinta Edição (REC-xml-20081126); o DOM é construído via `DOMParser().parseFromString(src, 'application/xml')`, equivalente a libxml2 ou `xmllint --format` no lado do servidor.
  • Estrito por design: tags incompatíveis, `&`/`<` não escapados, atributos duplicados ou caracteres inválidos acionam um elemento `<parsererror>`; a recuperação permissiva do HTML não se aplica.
  • Cinco entidades predefinidas recodificadas em valores de texto e atributo: `&amp;` `&lt;` `&gt;` `&quot;` `&apos;`. Referências numéricas de caracteres como `&#10;` são preservadas como estão.
  • Auto-fechamento `<foo/>` e `<foo></foo>` são semanticamente idênticos conforme §3.1; seções CDATA são preservadas literalmente e não podem conter o terminador `]]>`.
  • Conteúdo misto (texto + elementos filhos) não pode ser re-indentado sem alterar o infoset — o serializador detecta espaços em branco significativos e serializa essas subárvores em linha.
  • Declarações de namespace (`xmlns`, `xmlns:prefix`) permanecem no elemento da primeira declaração; movê-las altera o escopo. A ordem dos atributos não é canônica, então uma ordenação estável (xmlns primeiro, depois alfabética) é o padrão.
  • Complexidade: análise O(n) e serialização O(n) para ferramentas baseadas em DOM; documentos grandes são processados via streaming com SAX/StAX (xml.sax em Python, javax.xml.stream em Java) para evitar carregar a árvore completa na memória.

Exemplos

Elementos básicos

<!-- Entrada (uma linha) -->
<book><title>XML Guide</title><author>Jane Doe</author><year>2024</year></book>

<!-- Saída (2 espaços) -->
<book>
  <title>XML Guide</title>
  <author>Jane Doe</author>
  <year>2024</year>
</book>

Com atributos

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <book id="b001" lang="en" available="true">
    <title>Effective XML</title>
    <price currency="USD">29.99</price>
  </book>
</catalog>

Estrutura aninhada com namespaces e CDATA

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ns:GetUser xmlns:ns="https://example.com/api">
      <ns:UserId>10086</ns:UserId>
      <ns:Script>
        <![CDATA[ if (a < b && b > 0) { return true; } ]]>
      </ns:Script>
    </ns:GetUser>
  </soap:Body>
</soap:Envelope>

Perguntas frequentes

O que ele faz?

Formata o XML de forma legível, indentando elementos aninhados, colocando cada elemento em sua própria linha e alinhando as tags de fechamento. Útil para inspecionar respostas SOAP, feeds RSS, arquivos de configuração e outros payloads XML que chegaram como uma linha gigante.

Ele valida contra um schema?

Não. Ele formata qualquer XML bem formado que você colar. A validação por schema (XSD, DTD, RELAX NG) precisa de uma ferramenta separada. Erros de boa formação (tags incompatíveis, fechamentos faltando) são reportados, mas a página não vai corrigi-los.

Ele preserva a ordem dos atributos?

Sim. Tecnicamente, a ordem dos atributos em XML não é significativa pela especificação, mas o formatador mantém a ordem original para evitar surpresas. Seções CDATA, comentários e instruções de processamento também são preservados.

Como os espaços em branco são tratados?

Os espaços entre elementos são normalizados (um elemento por linha com indentação). Os espaços dentro do conteúdo de texto são preservados por padrão — o conteúdo do elemento é significativo. Atributos xml:space='preserve' são respeitados onde existirem.

Posso minificar XML?

Algumas versões oferecem um modo de minificação que remove os espaços entre elementos. Tome cuidado: qualquer espaço em branco que era significativo (conteúdo de texto, regiões com xml:space='preserve') deve ser preservado. Teste o ida e volta se seu XML tiver conteúdo de texto rico.

O XML é enviado para o servidor?

Não. A análise e a formatação rodam no seu navegador usando DOMParser e XMLSerializer (nativos do navegador). Nada é transmitido.

E os namespaces XML?

Declarações de namespace (xmlns) e elementos/atributos com prefixo são formatados exatamente como foram escritos. A redeclaração do mesmo namespace em elementos aninhados é preservada (alguns validadores se importam, outros não).