A primeira vez que o XML quase estragou minha tarde, foi uma resposta SOAP de um gateway de pagamento Uma linha Onze mil caracteres Sem novas linhas, sem recuo, apenas uma parede ininterrupta de colchetes angulares que meu terminal embrulhou em um tijolo ilegível Em algum lugar havia um único elemento errado causando uma incompatibilidade de assinatura, e EU deveria encontrá-lo a olho nu Eu construí muitas coisas desde então - plugins WordPress, APIs Laravel, a ferramenta React por trás de [Toolz.dev] (/ - e posso dizer que um bom formatador XML é um daqueles utilitários silenciosos que você não aprecia até o momento em que você está olhando para uma parede de tags com um prazo atrás de você.
Este guia é o que EU gostaria de ter naquela tarde Ele cobre o que um formatador XML realmente faz, por que embelezar e minificar são dois lados da mesma moeda, a regra de espaço em branco que torna a formatação segura e o punhado de erros de validação que respondem por quase todos os & quot; por que ganhou & #39; t este parse & quot; momento Você pode acompanhar no navegador com o gratuito Formatador XML - ele roda inteiramente na sua máquina, então mesmo uma carga útil de pagamento nunca sai do seu laptop.
tl;dr: Um formatador XML reescreve um documento e espaço em branco insignificante do número 39; - o espaço entre tags - sem tocar no seu significado Embelezar adiciona quebras de linha e recuo para que você possa ler a hierarquia; minificar tiras tudo isso para que o arquivo seja o menor possível Um bom formatador preserva comentários, CDATA, a declaração XML e ordem de atributos, e valida a boa formação (tags correspondentes, elementos fechados, seções terminadas) ao longo do caminho não verifique seu documento em relação a um esquema DTD ou XSD - esse é um trabalho diferente.
O que um formatador XML realmente faz?
O espaço em branco é onde a formatação fica interessante, porque XML 1.0 requer que um analisador passe todos os caracteres dentro de um elemento para o aplicativo - e é por isso que um formatador tem que saber o que é seguro tocar Em sua essência, um formatador XML analisa seu documento em uma árvore de nós - elementos, texto, comentários, seções CDATA, instruções de processamento - e, em seguida, serializa essa árvore de volta com espaçamento consistente Essa viagem de ida e volta é o truque completo Como a ferramenta entende a estrutura em vez de fazer uma descoberta e substituição cega, ela pode recuar um aninhado profundamente <order><items><item> acorrente corretamente, coloque cada irmão em sua própria linha e saiba que o texto está dentro <price>44.95</price> deve permanecer na mesma linha de suas tags, em vez de se espalhar por três.
A razão pela qual isso importa se resume a uma regra enterrada na especificação XML: a maioria dos espaços em branco entre os elementos é insignificante. Quando um analisador lê <a>\n <b/>\n</a>, as novas linhas e espaços ao redor <b/> existem para humanos e não carregam dados Um formatador tem permissão para adicionar, remover ou alterar esse espaço em branco livremente O que ele nunca deve tocar é significativo espaços em branco - os caracteres dentro de um nó de texto como <note>Call me at 9am</note>0, ou qualquer coisa dentro de um bloco CDATA - porque esse conteúdo são dados reais Toda decisão de formatação o Formatador XML faz fluxos respeitando essa linha.
Então embelezar não é penugem cosmética Quando você re-indent que onze mil caracteres SOAP tijolo, a hierarquia do elemento torna-se visível, e de repente o extraviado <Amount> nó três níveis muito profundo é óbvio A formatação é uma ferramenta de depuração tanto quanto uma legibilidade.
Por que EU iria minificar XML em vez de embelezá-lo?
Embelezar e minificar são o mesmo mecanismo apontado em direções opostas. Embelezar adiciona espaços em branco para humanos; minify o remove para máquinas Você busca minify quando o tamanho ou o transporte importam: reduzir um arquivo de configuração enviado dentro de um pacote de aplicativos móveis, cortar um corpo de solicitação antes que ele ultrapasse uma conexão lenta ou normalizar um documento para que duas versões possam ser comparadas byte por byte sem que o ruído de recuo atrapalhe.
A economia é real, mas raramente dramática. A verbosidade XML' vive em seus nomes de tags repetidos, não em seus espaços em branco, então minificar normalmente os acabamentos em algum lugar entre cinco e vinte por cento, dependendo de quão fortemente recuado era o original. Vale a pena ter isso, mas se você precisar de uma compressão séria, o zíper no fio faz muito mais - minificar e depois cortar é a abordagem de cinto e suspensórios que muitas APIs usam.
Aqui está o modelo mental que uso ao decidir qual caminho apontar a ferramenta:
| situação | embelezar | reduzir |
|---|---|---|
| Lendo ou depurando uma resposta a olho nu | sim | não |
| A enviar um ficheiro de configuração para o controlo de versão | Sim (diffs limpos) | não |
| Envio de XML dentro de um pacote de aplicativos ou pela rede | não | sim |
| Armazenando muitos documentos pequenos em uma coluna de banco de dados | não | sim |
| Preparando um documento para um diff byte por byte | Ou, consistentemente | Ou, consistentemente |
| Transmitindo XML para outro desenvolvedor | sim | não |
A disciplina chave é a consistência Se você está diffing dois documentos, executar ambos através do mesmo modo com as mesmas opções primeiro - caso contrário, você está comparando estilos de recuo, não conteúdo.
Como a formatação evita alterar meus dados?
Esta é a ansiedade que todo formatador tem de superar: & quot; se esta ferramenta reescreve meu XML, como posso saber se ela não quebrou algo silenciosamente?" A resposta honesta é que um formatador bem construído só muda o espaço em branco entre as tags e deixa quatro coisas estritamente sozinhas.
O primeiro é conteúdo texto. Os caracteres dentro de um elemento são copiados literalmente. Isso inclui entidades - um literal & fica &, nunca é decodificado de forma útil & (o que produziria XML inválido) ou codificado duas vezes para &amp;. o Formatador XML trata seu texto como opaco, que é exatamente o que você deseja.
A segunda é Seções CDATA. um <![CDATA[ ... ]]> o bloco existe precisamente para que você possa descartar conteúdo bruto e não escapado - um trecho de JavaScript, um pedaço de HTML, uma string cheia de < e & - em um documento XML sem escapar dele Um formatador emite esse conteúdo exatamente como ele encontrou, sem escapar, sem re-indenting dentro do bloco.
O terceiro é comentários e a declaração. Comentários (<!-- ... -->), o <?xml version="1.0"?> declaração, e quaisquer instruções de processamento são preservadas e colocadas de forma sensata Você pode optar por retirar comentários quando quiser um arquivo mais enxuto, mas essa é a sua decisão, não algo que a ferramenta faz pelas suas costas.
O quarto é ordem de atributos e cotação. Por padrão o formatador mantém seus atributos na ordem em que você os escreveu, com o estilo de citação que você usou, porque a especificação XML trata a ordem dos atributos como insignificante e não há razão para agitá-la quando você fazer quer uma ordenação canónica - para diferenças mais limpas, ou para comparar dois elementos que carregam os mesmos atributos em ordens diferentes - um & quot; classificar atributos" opção os coloca em ordem alfabética para você.
Como tudo isso é executado no lado do cliente em JavaScript, há um dividendo de privacidade também: um documento cheio de cadeias de conexão, identificadores internos ou registros de clientes é formatado em sua própria máquina e nunca carregado Se você se preocupa em manter os dados de trabalho fora de outras pessoas & #39; s servidores - e você deveria - esse modelo vale a pena entender, e EU escrevi mais sobre isso no guia de privacidade de dados para ferramentas online.
Que erros de XML o formatador detecta?
Antes que um formatador possa imprimir qualquer coisa, ele precisa analisar o documento, e a análise é onde a validação útil acontece. Isto é bem-formidade verificação - as regras estruturais que todo documento XML deve obedecer - e, na minha experiência, três erros são responsáveis pela esmagadora maioria das falhas.
O mais comum, de longe, é a ampersand nu. Reservas XML & para iniciar uma entidade, então um bruto & em texto - o tipo que entra furtivamente através de um URL como ?a=1&b=2 ou um nome de empresa como o & quot; Marks & amp; Spencer" - faz com que o analisador espere um nome de entidade e depois engasgue quando não encontrar um A correção é escrever &, e uma boa mensagem de erro irá apontá-lo para a linha para que você não esteja caçando às cegas.
O segundo é a etiqueta incompatível ou não fechada. Abra a <div> e feche com </section>, ou abra um <span> e nunca feche de todo, e o documento já não está bem formado O formatador rastreia a pilha de elementos abertos à medida que analisa, para que possa dizer-lhe exactamente qual a marca que esperava ver fechada e qual encontrou de facto Essa única mensagem - & quot; esperada </book> mas encontrado </author> na linha 14" - é normalmente suficiente para resolver o problema em segundos.
O terceiro é um seção não-terminada: um comentário aberto com <!-- que nunca alcança -->, ou um bloco CDATA que nunca chega ]]>. Estes são fáceis de criar quando você está editando à mão e excluir um pouco demais Novamente, o formatador relata a linha onde a seção fugitiva começou.
O que o formatador faz não do está a verificar o seu documento em relação a um esquema Bem - a formação pergunta ao & quot; este XML estruturalmente válido? & quot; A validade pergunta ao & quot; este XML segue as regras do meu particular tipo de documento - os elementos certos, na ordem certa, com os tipos de dados certos - conforme definido por um DTD ou XSD?" Esses são camadas separadas Um documento pode ser perfeitamente bem formado e ainda ser um absurdo para o propósito pretendido A validação do esquema precisa do esquema, e essa é uma ferramenta diferente O formatador garante a primeira camada, que é aquela que impede a falha do seu analisador.
Como formato XML no meu editor ou pipeline de compilação?
A ferramenta do navegador é o caminho mais rápido para um documento único, mas vale a pena conhecer as alternativas para que você possa escolher a opção certa para o trabalho.
A maioria dos editores formatam XML nativamente No VS Code, o & quot; Format Document" command (Shift+Alt+F) lida com XML, e extensões como Red Hat' s XML language server adicionam formatação com reconhecimento de esquema no topo IntelliJ e seus irmãos reformatam com Ctrl+Alt+L. Estes são ideais quando o arquivo já está aberto na sua frente.
Na linha de comando, xmllint --format file.xml (parte do libxml2, que vem na maioria dos sistemas Unix) embeleza, e xmllint --noblanks file.xml aproxima você da saída minificada Em um projeto Node, bibliotecas como xml-formatter ou prettier com o slot do plugin XML em uma etapa de compilação Os desenvolvedores do Python buscam xml.dom.minidom.parseString(s).toprettyxml(), embora esteja avisado de que é notório por adicionar linhas em branco extras ao redor dos espaços em branco existentes.
Então, por que usar o Formatador XML em tudo? três razões que EU continuo voltando para. Ele não precisa de instalação, sem configuração, e nenhum projeto - você colar e ir Ele mantém os dados em sua máquina, o que importa quando o XML é uma carga real, em vez de um exemplo de brinquedo E ele emparelha naturalmente com as ferramentas vizinhas: uma vez que seu XML está limpo e válido, convertendo-o para JSON com o Conversor de XML para JSON é um clique e o inverso passa json para xml usa as mesmas convenções Se o seu dia é principalmente JSON, o formatador json é o equivalente para esse formato, e toda a família está catalogada no Kit de ferramentas para desenvolvedores web.
Quando devo formatar versus converter meu XML?
Uma pergunta que recebo de pessoas mais novas para isso: se o JSON é mais fácil de ler, por que formatar XML em vez de apenas convertê-lo? a resposta é que formatar e converter resolvem problemas diferentes.
Formatar quando precisar manter o XML - porque um endpoint SOAP exige isso, porque um feed RSS ou Atom é XML por definição, porque seu arquivo de configuração, seu layout Android ou seu Maven pom.xml simplesmente é XML e sempre será A formatação torna esse XML legível ou compacto, deixando-o como XML Nada downstream tem que mudar.
Converta quando quiser trabalhe com os dados em um formato diferente - puxar valores para um front-end JavaScript, carregar um feed em um sistema que fala JSON ou normalizar várias fontes em um formato. A conversão altera o formato e, com isso, parte da fidelidade: atributos XML, conteúdo misto e ordenação de elementos não possuem equivalentes JSON limpos, portanto, um conversor faz escolhas deliberadas (os atributos tornam-se chaves prefixadas, as tags repetidas tornam-se matrizes) que você deve entender antes de confiar nelas.
Minha regra prática: formate primeiro, sempre Um documento limpo e validado é mais fácil de raciocinar sobre se o seu próximo passo é editá-lo, diffing-lo ou convertê-lo A formatação é a operação barata, segura e sem perdas; a conversão é a com perdas que você faz quando sabe que a estrutura é sólida Os mapas do site são um bom exemplo de XML que você formata em vez de converter - se você estiver construindo um, o dedicado gerador sitemap produz saída válida e bem formada diretamente.
Perguntas frequentes
Como faço para formatar o XML online?
Cole seu XML no painel de entrada, escolha embelezar, escolha uma largura de recuo e clique em Formatar. A ferramenta analisa o documento, reincide e permite que você copie ou baixe o resultado. Todo o processamento acontece no seu navegador - nada é carregado.
Qual é a diferença entre embelezar e minimizar o XML?
Embelezar adiciona quebras de linha e recuo para que a hierarquia de elementos seja fácil de ler, o que é ideal para edição e depuração Minificar remove todos os espaços em branco entre tags para produzir o menor arquivo possível, o que é ideal para armazenamento ou envio pela rede. Ambos preservam o documento e o significado do #39; apenas o espaço em branco insignificante muda.
A formatação altera o significado do meu XML?
não . Somente o espaço em branco entre as tags é alterado - os elementos, atributos, conteúdo do texto, comentários e cData permanecem inalterados. Como os espaços em branco significativos dentro dos nós de texto e o CDATA são preservados, um documento bem formado se comporta de forma idêntica antes e após a formatação.
As seções Comentários e CData são preservadas?
Sim. Comentários, seções CDATA, a declaração XML e instruções de processamento são todos mantidos Comentários são recuados ao lado dos elementos com os quais eles se sentam, e conteúdo CDATA é emitido literalmente sem qualquer escape Você também pode optar por retirar comentários se quiser uma saída mais enxuta.
Essa ferramenta pode validar meu XML?
Sim. Antes da formatação, o documento é totalmente analisado e os problemas estruturais - um elemento não fechado, uma tag de fechamento que não correspondem à sua tag de abertura ou a um comentário não terminado ou seção cData - são relatados com um número de linha para que você possa corrigi-los rapidamente. Ele verifica bem-formações, não validade em relação a um esquema DTD ou XSD.
Por que meu XML não está formatando?
Quase todas as falhas são erros de boa formação Os mais comuns são um e comercial simples em texto (deve ser escrito como uma entidade, ou o analisador o lê como o início de uma entidade), uma tag de fechamento que não corresponde ao elemento que fecha e um elemento que é aberto, mas nunca fechado A mensagem de erro aponta na linha para que você possa pular direto para ela.
É seguro formatar o XML que contém dados confidenciais?
Sim. O analisador é executado inteiramente em JavaScript em seu navegador - nenhuma solicitação de rede carrega seus dados, nada é registrado ou armazenado e a ferramenta funciona offline uma vez carregada. XML que contém chaves de API, strings de conexão ou registros de clientes nunca sai de sua máquina.
Posso converter o XML formatado para JSON depois?
Sim. Uma vez que o XML é limpo e válido, o conversor XML para JSON o transforma em JSON equivalente, mapeando atributos para chaves prefixadas e tags repetidas para arrays. A formatação primeiro torna a estrutura óbvia, o que ajuda você a entender como ela será mapeada antes de converter.
Escrito por Liton - construtor de Toolz.dev, WP Adminify, e uma longa lista de projetos Laravel e React Toda ferramenta mencionada aqui é executada de forma gratuita e completa em seu navegador em [Toolz.dev] (/.



