Wklej HTML po lewej i kliknij "Konwertuj" — zamienimy go w dobrze sformułowany XMLWklej HTML

Co robi to narzędzie

Jeśli kiedykolwiek musiałeś wepchnąć skopiowany kawałek HTML do potoku XSLT albo do rygorystycznego parsera XML, znasz ten ból. Przeglądarki są słynnie pobłażliwe — parser HTML ze specyfikacji WHATWG po cichu zamyka twoje tagi <li>, akceptuje atrybuty bez cudzysłowów i wzrusza ramionami na brakujące </p>. Parser XML tak nie robi. Daj mu ten sam znacznik, a dostaniesz błąd parsowania w linii 3. To narzędzie bierze HTML z prawdziwego świata — ten, który naprawdę wklejasz z CMS-a albo ze starego szablonu — i zamienia go w XML, który parser zgodny ze standardem przyjmie za pierwszym razem.

To coś więcej niż zamykanie tagów. Konwerter ogarnia cały zestaw rzeczy, które czynią HTML luźnym, a XML rygorystycznym: elementy puste jak <br>, <img> i <hr> zostają samozamykające jako <br/>; atrybuty boolowskie jak checked i disabled są rozwijane do checked="checked"; wartości atrybutów bez cudzysłowów są otaczane cudzysłowami podwójnymi; nazwy tagów są sprowadzane do małych liter dla spójności; a garstka nazwanych encji HTML, których XML nie zna (&nbsp;, &mdash;, &pound;, &times; itd.) zostaje przekonwertowana na encje liczbowe w stylu &#160;, które rozumie każdy parser XML.

Komentarze przechodzą nietknięte. Sekcje CDATA wewnątrz <script> i <style> są zachowywane. Wynik jest ładnie sformatowany, żebyś mógł go faktycznie przeczytać, przechodzi walidację W3C jako dokument XML albo wpasowuje się prosto w przepływ XHTML 1.0. Jeśli naprawdę chcesz XHTML Strict, jesteś już w 95 % u celu — doctype i przestrzeń nazw na górze dopiszesz sam.

Jak tego używać

Trzy kroki. Działa tak samo, czy wklejasz jeden akapit, czy cały szablon strony.

1

Wklej swój HTML (lub wypróbuj przykład)

Wrzuć HTML do lewego edytora tak, jak jest. Niezamknięte tagi, gołe atrybuty boolowskie, wartości bez cudzysłowów, elementy puste bez samozamknięcia — wszystko gra. Kliknij Wczytaj przykład, jeśli wolisz najpierw zobaczyć realistyczny, bałaganiarski przypadek.

Nie musisz nic poprawiać ręcznie. O to właśnie chodzi w tym narzędziu — robi sprzątanie za ciebie. Wklej dokładnie to, co wyszło z twojego CMS-a, dokumentu Worda albo starego szablonu.

2

Naciśnij Konwertuj

Kliknij zielony przycisk Konwertuj. Narzędzie parsuje twój HTML tolerancyjnym parserem, a potem serializuje go ponownie przez writer XML, tak aby każdy tag był zamknięty, każdy atrybut w cudzysłowach, a każda encja była poprawnym XML-em.

3

Skopiuj XML

Prawy panel zapełnia się wciętym, dobrze sformułowanym XML-em. Skopiuj go do wejścia XSLT, do fixture'a testu DOM, do builda EPUB-a albo gdziekolwiek tam potrzebujesz znaczników, na których rygorystyczny parser się nie wywróci.

Kiedy to naprawdę się przydaje

Wpychanie HTML-a do XSLT lub do potoku XML

Masz arkusz XSLT, który zamienia treść w PDF, feed albo inny format — ale wejściem jest HTML z CMS-a, nie XML. Najpierw konwertuj, potem transformuj.

Walidacja XHTML-strict

Stary intranet, który wciąż domaga się XHTML 1.0 Strict? Wklej niechlujny HTML z twojego edytora, skopiuj XML, dołóż doctype na górze — gotowe.

Konwersja znaczników bloga na EPUB / czytniki

EPUB pod spodem to XHTML i od ręki odrzuca brakujące <code>&lt;/p&gt;</code>. Wyczyść rozdział bloga HTML-owego w jednym wklejeniu, zanim go spakujesz.

Porządki dla systemów archiwizacji

Wrzucasz stary HTML do archiwum opartego na XML (DSpace, Fedora Commons, cokolwiek w smaku JATS)? Rygorystyczne schematy mają gdzieś to, że przeglądarka ładnie go wyrenderowała — najpierw przekonwertuj.

Najczęstsze pytania

Co tak naprawdę czyni HTML "luźnym", a XML "rygorystycznym"?

Trzy duże rzeczy. Po pierwsze, HTML ma elementy puste (<br>, <img>, <input>, <hr>, <meta>, <link>), które nie powinny mieć tagu zamykającego — XML wymaga albo <br></br>, albo <br/>. Po drugie, HTML pozwala kompletnie pomijać tagi zamykające przy <li> czy <p>, bo algorytm parsowania sam je dopowiada. Po trzecie, HTML akceptuje atrybuty bez cudzysłowów (class=foo) i atrybuty bez wartości (disabled). XML odrzuca wszystkie trzy rzeczy.

Co się dzieje z atrybutami boolowskimi jak `checked` i `disabled`?

Zostają rozwinięte do postaci XHTML-owej. <input type=checkbox checked disabled> staje się <input type="checkbox" checked="checked" disabled="disabled"/>. Każdy atrybut kończy się z nazwą ORAZ wartością w cudzysłowach, czego wymaga XML — w XML nie istnieje coś takiego jak atrybut bez wartości.

Jak obsługiwane są encje HTML jak `&nbsp;` i `&mdash;`?

XML z pudełka zna tylko pięć nazwanych encji: &amp;, &lt;, &gt;, &quot;, &apos;. Cała reszta — &nbsp;, &mdash;, &pound;, &copy; — jest konwertowana do postaci liczbowej (&#160;, &#8212;, &#163;, &#169;), żeby każdy parser XML przyjął je bez DTD.

Czy komentarze przeżywają przejście w obie strony?

Tak. <!-- do przeglądu --> wchodzi, to samo wychodzi. Komentarze są poprawne i w HTML, i w XML z tą samą składnią, więc przechodzą nietknięte — przydatne, jeśli używasz ich do notatek redakcyjnych albo znaczników buildów.

Czy zmienia nazwy tagów i atrybutów na małe litery?

Tak, domyślnie. <DIV Class="Foo"> staje się <div class="Foo">. Nazwy tagów i atrybutów są sprowadzane do małych liter, żeby pasowały do konwencji XHTML 1.0. WARTOŚCI atrybutów zostawiamy w spokoju — tego, co wpisałeś między cudzysłowami, nie ruszamy, bo to twoje dane.

Kiedy to nie wystarczy — których przypadków narzędzie NIE obsługuje?

Dowolna zawartość <script> jest zachowywana jako tekst, ale narzędzie nie próbuje przepisywać JavaScriptu tak, by był bezpieczny dla XML. Jeśli twój JS używa gołych znaków < lub &, musisz sam owinąć go w <![CDATA[...]]> (istniejące CDATA zachowujemy). Fragmenty dokumentu są OK; nie dokładamy deklaracji <?xml ?> ani doctype'u — dopisz je sam, jeśli twój konsument tego oczekuje.

Inne narzędzia, które mogą się przydać

HTML na XML to jeden element układanki. Te narzędzia dobrze z nim współpracują: