Formatador de XML
Formate e embeleze XML com realce de sintaxe
Entrada XML
XML Formatado
O que é Formatação de XML?
A formatação de XML (também chamada de pretty-printing ou embelezamento de XML) é o processo de adicionar indentação e quebras de linha consistentes a um documento XML para tornar sua estrutura hierárquica visível. O XML bruto proveniente de APIs, geradores de configuração ou serializadores costuma ser entregue em uma única linha, sem nenhum espaço em branco entre as tags. Um formatador de XML analisa o documento em uma árvore e o ressserializa com espaçamento previsível. O resultado é visualmente claro e muito mais fácil de compreender, sem que o conteúdo lógico do documento seja alterado de forma alguma.
A especificação XML 1.0 (Recomendação W3C, quinta edição) define uma gramática rígida em que toda tag de abertura deve ter uma tag de fechamento correspondente ou ser auto-fechada, os atributos devem estar entre aspas e cinco caracteres (<, >, &, ", ') exigem escape por entidade. Um formatador deve respeitar essas regras ao inserir apenas espaços em branco não significativos que não alterem o conjunto de informações (infoset) do documento.
O XML formatado é mais fácil de ler durante revisões de código, mais fácil de comparar em controle de versão e mais fácil de depurar quando um serviço retorna dados inesperados. A operação de formatação é sem perdas: o conteúdo lógico do documento permanece idêntico; apenas a apresentação muda. Ferramentas como git diff e plataformas de revisão de pull request exibem apenas as linhas modificadas — um XML com indentação consistente garante que os diffs reflitam alterações reais, e não ruído de reformatação.
<catalog><book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title><genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date></book><book id="bk102"><author>Ralls, Kim</author><title>Midnight Rain</title><genre>Fantasy</genre><price>5.95</price><publish_date>2000-12-16</publish_date></book></catalog>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
</book>
</catalog>Por que Usar um Formatador de XML Online?
Formatar XML manualmente é lento e sujeito a erros, especialmente em documentos com aninhamento profundo ou namespaces mistos. Um formatador no navegador entrega o resultado formatado em menos de um segundo, independentemente do tamanho do arquivo. Ao contrário de ferramentas desktop ou utilitários de linha de comando, não requer instalação nem configuração — basta abrir a página e começar a trabalhar imediatamente.
Casos de Uso do Formatador de XML
Referência de Entidades Predefinidas do XML
O XML reserva cinco caracteres para sua sintaxe. Quando esses caracteres aparecem como texto literal ou como valores de atributo, eles devem ser substituídos por referências a entidades predefinidas. Um formatador correto preserva essas entidades durante o pretty-printing.
| Caractere | Papel no XML | Entidade |
|---|---|---|
| < | Start of tag | < |
| > | End of tag | > |
| & | Start of entity | & |
| " | Attribute delimiter | " |
| ' | Attribute delimiter | ' |
Comparação de Estilos de Indentação no XML
Não existe um padrão único para indentação de XML. A escolha depende das convenções da sua equipe e das ferramentas no seu pipeline. Aqui estão os três estilos mais comuns.
Exemplos de Código: Formatar XML Programaticamente
Quando você precisa formatar XML dentro de um script ou processo de build, toda linguagem importante oferece uma opção nativa ou da biblioteca padrão. Abaixo estão exemplos funcionais que você pode copiar diretamente.
const raw = '<root><item>hello</item></root>'
const parser = new DOMParser()
const doc = parser.parseFromString(raw, 'application/xml')
const serializer = new XMLSerializer()
const xml = serializer.serializeToString(doc)
// Indent with XSLT (browser-native approach)
const xslt = new DOMParser().parseFromString(`
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
</xsl:template>
</xsl:stylesheet>`, 'application/xml')
const proc = new XSLTProcessor()
proc.importStylesheet(xslt)
const formatted = proc.transformToDocument(doc)
console.log(new XMLSerializer().serializeToString(formatted))
// → <root>\n <item>hello</item>\n</root>import xml.dom.minidom raw = '<root><item>hello</item><item>world</item></root>' dom = xml.dom.minidom.parseString(raw) print(dom.toprettyxml(indent=' ')) # → <?xml version="1.0" ?> # → <root> # → <item>hello</item> # → <item>world</item> # → </root> # With lxml (handles namespaces, XSD, large files) from lxml import etree tree = etree.fromstring(raw.encode()) print(etree.tostring(tree, pretty_print=True).decode())
package main
import (
"encoding/xml"
"fmt"
"strings"
)
func formatXML(raw string) (string, error) {
decoder := xml.NewDecoder(strings.NewReader(raw))
var out strings.Builder
encoder := xml.NewEncoder(&out)
encoder.Indent("", " ")
for {
tok, err := decoder.Token()
if err != nil {
break
}
encoder.EncodeToken(tok)
}
encoder.Flush()
return out.String(), nil
}
// formatXML("<a><b>1</b></a>") → "<a>\n <b>1</b>\n</a>"# Format XML file with xmllint (part of libxml2, pre-installed on macOS/Linux) xmllint --format input.xml > formatted.xml # Format from stdin echo '<a><b>1</b></a>' | xmllint --format - # → <?xml version="1.0"?> # → <a> # → <b>1</b> # → </a> # Validate and format at the same time xmllint --format --schema schema.xsd input.xml