HTML to XML コンバーター
ゆるい HTML を貼り付けてください。整形式の XML が返ってきます。
このツールでできること
コピペした HTML スニペットを XSLT パイプラインや厳格な XML パーサーに流し込まなければならなかった経験があれば、あの苦しみはご存じでしょう。ブラウザは寛容なことで有名で、WHATWG 仕様の HTML パーサーは <li> タグを黙って閉じ、引用符のない属性を受け入れ、</p> の欠落も無視します。XML パーサーはそうはいきません。同じマークアップを食わせれば 3 行目でパースエラーです。このツールは、CMS やレガシーテンプレートから実際にコピペするような現実の HTML を受け取り、標準準拠のパーサーが一発で受け入れる XML に変換します。
タグを閉じるだけではありません。コンバーターは、HTML をゆるくし XML を厳格にする要素一式を処理します。<br>、<img>、<hr> といった空要素は <br/> の形で自己閉鎖され、checked や disabled のような真偽値属性は checked="checked" に展開され、引用符のない属性値は二重引用符で囲まれ、タグ名は一貫性のため小文字に揃えられます。そして、XML が知らない一握りの名前付き HTML エンティティ( 、—、£、× など)は、どの XML パーサーでも理解できる   のような数値エンティティに変換されます。
コメントはそのまま通ります。<script> や <style> 内の CDATA セクションも保持されます。出力は実際に読めるように整形され、XML ドキュメントとして W3C バリデーションに通り、XHTML 1.0 ワークフローにそのままはめ込むこともできます。本当に欲しいのが XHTML Strict なら、これで 95% は終わったも同然 — 先頭に doctype と名前空間を自分で足すだけです。
使い方
3 ステップです。段落 1 つでもページテンプレート 1 枚でも、やることは同じです。
HTML を貼り付ける(またはサンプルを試す)
左側のエディターに HTML をそのまま放り込んでください。閉じていないタグ、裸の真偽値属性、引用符のない値、自己閉鎖なしの空要素 — すべて問題ありません。リアルで雑然とした例をまず見たければ サンプルを読み込む をクリックしてください。
手で直す必要はありません。このツールの目的はまさにそのクリーンアップを代行することです。CMS や Word ドキュメント、レガシーテンプレートから出てきたそのままを貼り付けてください。
変換を押す
緑色の 変換 ボタンをクリックしてください。ツールは寛容なパーサーで HTML を解析し、XML ライターで再シリアライズします。すべてのタグが閉じられ、すべての属性が引用符で囲まれ、すべてのエンティティが XML として正当になります。
XML をコピー
右側のパネルがインデントされた整形式 XML で埋まります。XSLT の入力、DOM テストのフィクスチャ、EPUB ビルド、その他厳格なパーサーが詰まらないマークアップが必要な場所にコピーしてください。
実際に役立つ場面
HTML を XSLT や XML パイプラインに流す
コンテンツを PDF、フィード、その他のフォーマットに変換する XSLT スタイルシートがあるのに、入力は XML ではなく CMS の HTML — そんなとき。まず変換、次に変形。
XHTML 厳格バリデーション
いまだに XHTML 1.0 Strict を要求する古いイントラネット? エディターが吐いた雑な HTML を貼り付け、XML をコピーし、上に doctype を乗せれば完成。
ブログマークアップを EPUB / 電子書籍リーダー用に変換
EPUB は中身が XHTML で、<code></p></code> の欠落を即座に拒否します。パッケージ化する前に一章分のブログ HTML を一回の貼り付けでクリーンアップ。
アーカイブシステム向けクリーンアップ
古い HTML を XML ベースのアーカイブ(DSpace、Fedora Commons、JATS 系のなにか)に流し込む? 厳格なスキーマは、ブラウザでうまくレンダリングされていたかどうかなど気にしません — まず変換してください。
よくある質問
実際のところ、何が HTML を「ゆるく」し XML を「厳格に」しているのですか?
大きく 3 つあります。1 つ目、HTML には閉じタグを持たないことになっている空要素(<br>、<img>、<input>、<hr>、<meta>、<link>)があります — XML は <br></br> か <br/> のどちらかを要求します。2 つ目、HTML は <li> や <p> のような要素について閉じタグの完全な省略を許します。パースアルゴリズムが補うからです。3 つ目、HTML は引用符のない属性(class=foo)や値のない属性(disabled)を受け入れます。XML はこれら 3 つをすべて拒否します。
`checked` や `disabled` のような真偽値属性はどうなりますか?
XHTML 形式に展開されます。<input type=checkbox checked disabled> は <input type="checkbox" checked="checked" disabled="disabled"/> になります。すべての属性が名前 AND 引用符付きの値を持つ形になります — これは XML の要求で、XML に「値のない属性」は存在しません。
` ` や `—` のような HTML エンティティはどう処理されますか?
XML が標準で知っている名前付きエンティティは 5 つだけ — &、<、>、"、'。それ以外 — 、—、£、© — は数値形式( 、—、£、©)に変換され、DTD なしでもどの XML パーサーでも受け入れられます。
コメントは往復後も残りますか?
はい。<!-- レビュー待ち --> を入れれば、同じものが出てきます。コメントは HTML と XML の両方で同じ構文で有効なので、手つかずで通過します — 編集メモやビルド時マーカーに使っているなら便利です。
タグ名と属性名を小文字にしますか?
はい、デフォルトで。<DIV Class="Foo"> は <div class="Foo"> になります。タグ名と属性名は XHTML 1.0 の慣例に合わせて小文字化されます。属性の「値」はそのままです — 引用符の中に入れたものはあなたのデータなので触りません。
これで足りないのはいつか — ツールが扱わないケースは?
任意の <script> コンテンツはテキストとして保持されますが、ツールは JavaScript を XML セーフに書き換えようとはしません。JS が裸の < や & を含むなら、自分で <![CDATA[...]]> で囲む必要があります(既存の CDATA は保持します)。ドキュメントフラグメントは問題ありません。<?xml ?> 宣言や doctype は合成しません — 下流の消費者が必要とするなら自分で追加してください。
合わせて使いたいツール
HTML to XML はパズルのひとピース。これらとよく組み合わせます: