Cole HTML à esquerda e clique em "Converter" — transformamos em XML bem formadoCole HTML

O que esta ferramenta faz

Se você já teve que enfiar um trecho de HTML copiado e colado em um pipeline XSLT ou em um parser XML estrito, já conhece a dor. Os navegadores são famosos por serem tolerantes — o parser HTML da especificação WHATWG fecha silenciosamente suas tags <li>, aceita atributos sem aspas e ignora um </p> faltante. Um parser XML, não. Entregue a mesma marcação e você leva erro de parse na linha 3. Esta ferramenta pega HTML do mundo real — do tipo que você realmente cola de um CMS ou de um template legado — e o transforma em XML que um parser em conformidade com o padrão vai aceitar de primeira.

Não é só fechar tags. O conversor lida com tudo que torna o HTML solto e o XML estrito: elementos vazios como <br>, <img> e <hr> são auto-fechados como <br/>; atributos booleanos como checked e disabled são expandidos para checked="checked"; valores de atributo sem aspas ganham aspas duplas; nomes de tag viram minúsculas para consistência; e o punhado de entidades HTML nomeadas que o XML não conhece (&nbsp;, &mdash;, &pound;, &times; etc.) vira entidades numéricas como &#160; que qualquer parser XML entende.

Comentários passam intactos. Seções CDATA dentro de <script> e <style> são preservadas. A saída sai formatada para você conseguir ler, e passa na validação do W3C como documento XML ou encaixa direto em um fluxo XHTML 1.0. Se o que você quer mesmo é XHTML Strict, isso já cobre 95% do caminho — basta adicionar o doctype e o namespace no topo você mesmo.

Como usar

Três passos. Funciona igual se você cola um único parágrafo ou um template de página inteiro.

1

Cole seu HTML (ou experimente o exemplo)

Jogue seu HTML no editor à esquerda como está. Tags não fechadas, atributos booleanos nus, valores sem aspas, elementos vazios sem auto-fechamento — tudo tranquilo. Clique em Carregar Exemplo se quiser ver primeiro um caso realista e bagunçado.

Você não precisa consertar nada na mão. O ponto desta ferramenta é justamente fazer essa limpeza por você. Cole exatamente como saiu do seu CMS, documento do Word ou template legado.

2

Clique em Converter

Clique no botão verde Converter. A ferramenta parseia seu HTML com um parser tolerante e depois re-serializa via writer XML para que toda tag feche, todo atributo tenha aspas e toda entidade seja válida em XML.

3

Copie o XML

O painel direito se enche de XML bem formado e indentado. Copie para sua entrada XSLT, sua fixture de teste DOM, seu build EPUB ou onde precisar de marcação que um parser estrito não engasgue.

Quando isso realmente ajuda

Alimentar HTML em XSLT ou em um pipeline XML

Você tem uma folha XSLT que transforma conteúdo em PDF, em feed ou em outro formato — mas sua entrada é HTML de um CMS, não XML. Converte primeiro, transforma depois.

Validação XHTML Strict

Intranet legada que ainda exige XHTML 1.0 Strict? Cole o HTML largado do seu editor, copie o XML, bote um doctype no topo e pronto.

Converter marcação de blog para EPUB / e-readers

EPUB é XHTML por baixo dos panos e rejeita de cara um <code>&lt;/p&gt;</code> faltando. Limpe um capítulo inteiro de HTML de blog em uma única colagem antes de empacotar.

Limpeza para sistemas de arquivamento

Alimentar HTML antigo em um arquivo baseado em XML (DSpace, Fedora Commons, qualquer coisa com sabor de JATS)? Os esquemas estritos não estão nem aí se o navegador renderizou bem — converta antes.

Perguntas frequentes

O que, na prática, torna HTML "solto" e XML "estrito"?

Três coisas grandes. Primeiro, HTML tem elementos vazios (<br>, <img>, <input>, <hr>, <meta>, <link>) que não deveriam ter tag de fechamento — XML exige <br></br> ou <br/>. Segundo, HTML permite omitir tags de fechamento totalmente em coisas como <li> e <p> porque o algoritmo de parsing as deduz. Terceiro, HTML aceita atributos sem aspas (class=foo) e sem valor (disabled). XML rejeita os três.

O que acontece com atributos booleanos como `checked` e `disabled`?

Viram a forma XHTML. <input type=checkbox checked disabled> vira <input type="checkbox" checked="checked" disabled="disabled"/>. Todo atributo acaba com um nome E um valor entre aspas, que é o que o XML exige — não existe atributo sem valor em XML.

Como entidades HTML como `&nbsp;` e `&mdash;` são tratadas?

XML conhece nativamente só cinco entidades nomeadas: &amp;, &lt;, &gt;, &quot;, &apos;. Todo o resto — &nbsp;, &mdash;, &pound;, &copy; — vira forma numérica (&#160;, &#8212;, &#163;, &#169;) para que qualquer parser XML aceite sem DTD.

Os comentários sobrevivem ao ciclo?

Sim. <!-- para revisão --> entra e sai igual. Comentários são válidos em HTML e XML com a mesma sintaxe, então passam direto sem alteração — útil se você os usa para notas editoriais ou marcadores de build.

Coloca nomes de tag e atributo em minúsculas?

Sim, por padrão. <DIV Class="Foo"> vira <div class="Foo">. Nomes de tag e atributo viram minúsculas para bater com a convenção XHTML 1.0. Os VALORES dos atributos ficam como estão — não mexemos no conteúdo entre aspas, porque isso são seus dados.

Quando isso não basta — quais casos a ferramenta NÃO trata?

O conteúdo arbitrário dentro de <script> é preservado como texto, mas a ferramenta não tenta reescrever JavaScript para ficar XML-safe. Se seu JS usa < ou & crus, você mesmo precisa envolver em <![CDATA[...]]> (a gente preserva CDATA existente). Fragmentos de documento são ok; não sintetizamos declaração <?xml ?> nem doctype — adicione você mesmo se o consumidor a jusante pedir.

Outras ferramentas que podem ajudar

HTML para XML é uma peça do quebra-cabeça. Estas ferramentas combinam bem: