Plak HTML links en klik op "Converteren" — wij maken er welgevormde XML vanHTML plakken

Wat deze tool doet

Wie ooit een gekopieerd-en-geplakt stukje HTML door een XSLT-pipeline of een strikte XML-parser heeft moeten duwen, kent de pijn. Browsers zijn berucht vergevingsgezind — de HTML-parser uit de WHATWG-spec sluit je <li>-tags stilletjes, accepteert attributen zonder quotes en haalt zijn schouders op bij een missende </p>. Een XML-parser doet dat niet. Voer dezelfde markup in en je krijgt een parse-error op regel 3. Deze tool pakt echte HTML — de soort die je werkelijk uit een CMS of een oude template plakt — en maakt er XML van die een standaardconforme parser in één keer accepteert.

Het is meer dan tags sluiten. De converter behandelt de hele set dingen die HTML los en XML strikt maken: lege elementen als <br>, <img> en <hr> worden zelfsluitend als <br/>; booleaanse attributen als checked en disabled worden uitgeklapt tot checked="checked"; ongequote attribuutwaarden krijgen dubbele aanhalingstekens; tagnamen worden voor de consistentie kleine letters; en het handjevol HTML-entiteiten dat XML niet kent (&nbsp;, &mdash;, &pound;, &times; enzovoort) wordt omgezet naar numerieke entiteiten als &#160; die elke XML-parser snapt.

Commentaar gaat onveranderd door. CDATA-secties binnen <script> en <style> blijven behouden. De uitvoer is netjes ingesprongen zodat je hem kunt lezen, en hij doorstaat W3C-validatie als XML-document of schuift direct in een XHTML 1.0-workflow. Als je eigenlijk XHTML Strict wilt, ben je hiermee 95% op weg — doctype en namespace bovenaan zet je er zelf op.

Hoe te gebruiken

Drie stappen. Werkt hetzelfde of je nu één paragraaf plakt of een heel paginatemplate.

1

Plak je HTML (of probeer het voorbeeld)

Gooi je HTML zoals hij is in de linker editor. Niet-gesloten tags, kale booleaanse attributen, ongequote waarden, lege elementen zonder zelfsluiting — allemaal prima. Klik op Voorbeeld laden als je eerst een realistisch, rommelig voorbeeld wilt zien.

Je hoeft niets met de hand te fixen. Juist daarom is deze tool er — om de opruimbeurt voor je te doen. Plak het precies zoals het uit je CMS, Word-doc of oude template kwam.

2

Druk op Converteren

Klik op de groene knop Converteren. De tool parst je HTML met een tolerante parser en serialiseert hem opnieuw met een XML-writer, zodat elke tag gesloten is, elk attribuut quotes heeft en elke entiteit geldige XML is.

3

Kopieer de XML

Het rechterpaneel vult zich met ingesprongen, welgevormde XML. Kopieer hem naar je XSLT-input, je DOM-testfixture, je EPUB-build of waar je ook maar markup nodig hebt waar een strikte parser niet over struikelt.

Wanneer dit echt handig is

HTML in XSLT of een XML-pipeline stoppen

Je hebt een XSLT-stylesheet die content omzet in PDF, een feed of een ander formaat — maar je invoer is HTML uit een CMS, geen XML. Eerst converteren, dan transformeren.

XHTML-strict validatie

Ouderwets intranet dat nog steeds XHTML 1.0 Strict eist? Plak de slordige HTML die je editor produceerde, kopieer de XML eruit, zet een doctype erboven, klaar.

Blogmarkup converteren voor EPUB / e-readers

EPUB is onder de motorkap XHTML en weigert pertinent een missende <code>&lt;/p&gt;</code>. Ruim in één plakbeurt een heel hoofdstuk blog-HTML op voordat je gaat verpakken.

Opruimen voor archiefsystemen

Oude HTML in een XML-gebaseerd archief (DSpace, Fedora Commons, iets met JATS-smaak) stoppen? Strikte schema's geven niks om het feit dat de browser het prima renderde — converteer eerst.

Veelgestelde vragen

Wat maakt HTML eigenlijk "los" en XML "strikt"?

Drie grote dingen. Ten eerste heeft HTML lege elementen (<br>, <img>, <input>, <hr>, <meta>, <link>) die geen sluitende tag horen te hebben — XML eist óf <br></br> óf <br/>. Ten tweede laat HTML je sluitende tags compleet weglaten bij dingen als <li> en <p>, want het parse-algoritme vult ze aan. Ten derde accepteert HTML attributen zonder quotes (class=foo) en attributen zonder waarde (disabled). XML wijst alle drie af.

Wat gebeurt er met booleaanse attributen als `checked` en `disabled`?

Ze worden uitgevouwen naar de XHTML-vorm. <input type=checkbox checked disabled> wordt <input type="checkbox" checked="checked" disabled="disabled"/>. Elk attribuut eindigt met een naam EN een gequote waarde, wat XML nu eenmaal eist — een attribuut zonder waarde bestaat simpelweg niet in XML.

Hoe worden HTML-entiteiten als `&nbsp;` en `&mdash;` afgehandeld?

XML kent standaard maar vijf benoemde entiteiten: &amp;, &lt;, &gt;, &quot;, &apos;. Al het andere — &nbsp;, &mdash;, &pound;, &copy; — wordt omgezet naar de numerieke vorm (&#160;, &#8212;, &#163;, &#169;), zodat elke XML-parser ze zonder DTD accepteert.

Overleven commentaren de heen-en-weerreis?

Ja. <!-- gemarkeerd voor review --> gaat erin, hetzelfde komt eruit. Commentaar is zowel in HTML als in XML geldig met dezelfde syntax, dus het gaat ongemoeid door — handig als je ze voor redactionele notities of build-markers gebruikt.

Zet hij tag- en attribuutnamen om naar kleine letters?

Ja, standaard. <DIV Class="Foo"> wordt <div class="Foo">. Tag- en attribuutnamen worden naar kleine letters gebracht om te passen bij de XHTML 1.0-conventie. Attribuut-WAARDEN laten we met rust — wat jij tussen quotes zet, is jouw data, daar komen we niet aan.

Wanneer is dit niet genoeg — welke gevallen doet de tool NIET?

Willekeurige inhoud van <script> blijft behouden als tekst, maar de tool probeert geen JavaScript te herschrijven om het XML-veilig te maken. Als je JS kale <- of &-tekens bevat, moet je het zelf in <![CDATA[...]]> verpakken (bestaande CDATA laten we staan). Documentfragmenten zijn prima; we verzinnen geen <?xml ?>-declaratie of doctype — voeg die zelf toe als je afnemer ze verwacht.

Andere tools die je misschien nodig hebt

HTML naar XML is één stukje van de puzzel. Deze tools passen er goed bij: