Pega HTML a la izquierda y pulsa "Convertir" — lo transformaremos en XML bien formadoPega HTML

Qué hace esta herramienta

Si alguna vez has tenido que meter un fragmento HTML copiado y pegado en una tubería XSLT o en un parser XML estricto, ya conoces el dolor. Los navegadores son famosos por ser indulgentes — el parser HTML de la especificación WHATWG cerrará silenciosamente tus etiquetas <li>, aceptará atributos sin comillas y se encogerá de hombros ante un </p> faltante. Un parser XML no. Dale el mismo marcado y obtendrás un error de parseo en la línea 3. Esta herramienta coge HTML del mundo real — del tipo que realmente pegas desde un CMS o una plantilla heredada — y lo convierte en XML que un parser conforme al estándar aceptará a la primera.

Va más allá de cerrar etiquetas. El conversor maneja todo el conjunto de cosas que hacen que HTML sea permisivo y XML sea estricto: elementos vacíos como <br>, <img> y <hr> se auto-cierran como <br/>; atributos booleanos como checked y disabled se expanden a checked="checked"; los valores de atributo sin comillas se envuelven en comillas dobles; los nombres de etiqueta pasan a minúsculas por coherencia; y el puñado de entidades HTML con nombre que XML no conoce (&nbsp;, &mdash;, &pound;, &times;, etc.) se convierten en entidades numéricas como &#160; que cualquier parser XML entiende.

Los comentarios pasan intactos. Las secciones CDATA dentro de <script> y <style> se conservan. La salida se formatea legible para que realmente puedas leerla, y pasará la validación del W3C como documento XML o encajará directamente en un flujo de XHTML 1.0. Si lo que realmente quieres es XHTML Strict, esto te deja al 95% del camino — solo tienes que añadir el doctype y el namespace arriba tú mismo.

Cómo usarlo

Tres pasos. Funciona igual si pegas un solo párrafo o una plantilla de página entera.

1

Pega tu HTML (o prueba el ejemplo)

Suelta tu HTML en el editor de la izquierda tal cual. Etiquetas sin cerrar, atributos booleanos pelados, valores sin comillas, elementos vacíos sin auto-cierre — todo vale. Pulsa Cargar Ejemplo si quieres ver primero un caso realista y desordenado.

No necesitas arreglar nada a mano. El propósito de esta herramienta es que haga la limpieza por ti. Pégalo exactamente como salió de tu CMS, documento de Word o plantilla heredada.

2

Pulsa Convertir

Pulsa el botón verde Convertir. La herramienta parsea tu HTML con un parser tolerante y luego lo vuelve a serializar con un escritor XML para que cada etiqueta esté cerrada, cada atributo entre comillas y cada entidad sea XML válido.

3

Copia el XML

El panel derecho se llena con XML bien formado e indentado. Cópialo en tu entrada XSLT, tu fixture de pruebas DOM, tu build de EPUB o donde necesites marcado que un parser estricto no rechace.

Cuándo resulta realmente útil

Alimentar HTML a XSLT o a una tubería XML

Tienes una hoja XSLT que convierte contenido en un PDF, un feed u otro formato — pero tu entrada es HTML de un CMS, no XML. Convierte primero, transforma después.

Validación XHTML estricta

¿Intranet antigua que todavía exige XHTML 1.0 Strict? Pega el HTML descuidado que te dio tu editor, copia el XML resultante, pon un doctype arriba y listo.

Convertir marcado de blog para EPUB / e-readers

EPUB es XHTML por debajo y rechaza directamente un <code>&lt;/p&gt;</code> faltante. Limpia un capítulo entero de HTML de blog de un solo pegado antes de empaquetar.

Limpieza para sistemas de archivo

¿Meter HTML antiguo en un archivo basado en XML (DSpace, Fedora Commons, cualquier cosa con sabor a JATS)? A los esquemas estrictos les da igual que el navegador lo renderizara bien — conviértelo primero.

Preguntas frecuentes

¿Qué hace realmente que el HTML sea "permisivo" y el XML "estricto"?

Tres cosas grandes. Primero, HTML tiene elementos vacíos (<br>, <img>, <input>, <hr>, <meta>, <link>) que no deben tener etiqueta de cierre — XML exige <br></br> o <br/>. Segundo, HTML te deja omitir etiquetas de cierre por completo en cosas como <li> y <p> porque el algoritmo de parseo las deduce. Tercero, HTML acepta atributos sin comillas (class=foo) y atributos sin valor (disabled). XML rechaza las tres cosas.

¿Qué pasa con los atributos booleanos como `checked` y `disabled`?

Se expanden a la forma XHTML. <input type=checkbox checked disabled> se vuelve <input type="checkbox" checked="checked" disabled="disabled"/>. Cada atributo acaba con un nombre Y un valor entrecomillado, que es lo que XML exige — en XML no existe el atributo sin valor.

¿Cómo se tratan las entidades HTML como `&nbsp;` y `&mdash;`?

XML solo conoce cinco entidades con nombre por defecto: &amp;, &lt;, &gt;, &quot;, &apos;. El resto — &nbsp;, &mdash;, &pound;, &copy; — se convierte a su forma numérica (&#160;, &#8212;, &#163;, &#169;) para que cualquier parser XML las acepte sin DTD.

¿Los comentarios sobreviven al viaje de ida y vuelta?

Sí. <!-- pendiente de revisión --> entra y sale igual. Los comentarios son válidos en HTML y XML con la misma sintaxis, así que pasan tal cual — útil si los usas para notas editoriales o marcadores de build.

¿Pasa los nombres de etiqueta y atributo a minúsculas?

Sí, por defecto. <DIV Class="Foo"> se vuelve <div class="Foo">. Los nombres de etiqueta y atributo se pasan a minúsculas para seguir la convención de XHTML 1.0. Los VALORES de atributo se dejan en paz — no tocamos el contenido que pones entre comillas, porque esos son tus datos.

¿Cuándo no basta — qué casos NO maneja la herramienta?

El contenido arbitrario de <script> se conserva como texto, pero la herramienta no intenta reescribir el JavaScript para hacerlo seguro para XML. Si tu JS usa caracteres < o & pelados tendrás que envolverlo tú mismo en <![CDATA[...]]> (nosotros conservamos el CDATA existente). Los fragmentos de documento están bien; no sintetizamos declaración <?xml ?> ni doctype — añádelos tú si tu consumidor los necesita.

Otras herramientas que puedes necesitar

HTML a XML es una pieza del puzzle. Estas herramientas combinan bien con ella: