XML フォーマットとは何ですか?
XML(Extensible Markup Language)は、W3C が標準化した構造化文書とデータ交換のためのテキスト形式です。フォーマット——pretty-printing や beautify とも呼ばれます——は、整形式の XML ソースを読み込み、各要素、属性、コメント、処理命令、CDATA セクションを目で追いやすいよう再インデントします。解析された文書ツリーはそのまま保持され、変わるのは要素間の空白だけです。
XML フォーマットはどのように動作しますか?
入力はブラウザ組み込みの DOMParser・XMLSerializer API と自前の再帰インデンターを使って、すべてブラウザ内で処理されます。主な手順は次のとおりです:
- 入力はテキストエリアから逐語的に読み込まれます——貼り付けた 1 バイトもローカルメモリにのみ保持されます。
- ブラウザは
new DOMParser().parseFromString(text, 'application/xml')でそれを解析します。入力が整形式でない場合、パーサーは<parsererror>ノードを埋め込み、そのテキストにエンジンが返す行番号と列番号のヒントが含まれます——それらはそのままエラー帯に表示されます。 - 解析が成功すると、自前のインデンターが DOM ツリーを深さ優先で走査し、各要素、属性集合、CDATA セクション、コメント、処理命令を現在の深さで 1 行ずつ出力します。オプションが有効な場合、空要素は自己終了形式で扱われます。
- 最小化モードはパイプラインを反転させます。
XMLSerializer().serializeToString(doc)が単一行形式を出力し、続いてガード付きの正規表現が CDATA ブロックや非空白テキストノードの内容に触れることなく、要素間の空白を取り除きます。 - 出力は読み取り専用のテキストエリアに書き込まれ、エラー帯はクリアされ、ダウンロードボタンは結果を、送付やチケット添付に使える
.xmlファイルとしてパッケージ化します。
なぜこのツールで XML を pretty-print するのですか?
- プライバシー: あらゆる解析、整形、最小化はブラウザ内で行われます。XML が当社のサーバーに届くことはありません——アップロードなし、テレメトリーなし、アカウント不要。
- 正確なエラー: 入力が不正な場合、解析器はブラウザエンジン自身が報告する行番号と列番号をそのまま提示します——DevTools で見るのと同じ数字です。
- 忠実なラウンドトリップ: フォーマットしてから最小化すれば、元の文書とバイト等価な結果が得られます(XML 宣言オプションの分を除く)——フォーマットが名前空間を再正規化したり属性順を書き換えたりすることはありません。
- 高速: 純粋な DOMParser とおよそ 60 行のインデンターで、数 MB の SOAP エンベロープや OOXML 片を瞬時に処理し、外部ライブラリのダウンロードは不要です。
XML フォーマットの一般的な用途は何ですか?
XML の pretty-print は、ウェブ発行、エンタープライズ統合、データアーカイブにわたって登場します:
- RSS / Atom フィードの確認: ポッドキャストやニュースフィード本体を貼り付けて、公開前にチャンネルメタデータ、item の順序、名前空間プレフィックスを確認する。
- SOAP のデバッグ: Wireshark や SOAP クライアントのログからコピーしたエンベロープを整形し、Header、Body、Fault セクションを一目で見えるようにする。
- Sitemap の監査: 競合や自前のステージングから取得した sitemap.xml を再インデントし、エントリ数を数えたり URL ごとの hreflang 代替を確認したりする。
XML フォーマットの例はどのようなものですか?
3 要素の <feed><entry><title>Hello</title></entry></feed> を貼り付け、2 スペースインデントで 整形 を押すと、各要素が深さに応じてインデントされた 4 行の文書になります。同じ入力で Minify に切り替えれば、元のバイト列に折り返されます。整形式の文書ならラウンドトリップでロスは生じません。
オフラインで動作しますか?
はい。フォーマットおよび最小化のパイプラインは純粋な DOMParser + XMLSerializer と小さな再帰インデンターのみで、すべてブラウザタブ内で動作します。何もアップロードされず、Service Worker が入力をプロキシすることもなく、フォーマット手順自体はネットワークリクエストを一切発行しません。外向きの通信は通常のページ読み込み資産(CSS、フォント、解析)だけで、XML は Ultim8Soft に届きません。
フォーマットは文書を変更しますか?
意味的な変更はありません。フォーマットは要素間の空白のみを書き換えます。要素名、属性値、テキスト内容、CDATA ペイロード、コメント、処理命令はバイト単位で保持されます。名前空間宣言とプレフィックスは入力どおりに残ります——フォーマッターは再正規化や属性の並べ替えを行いません。任意の XML 宣言の切り替えを除き、出力は入力と同じ DOM ツリーへ解析されます。
CDATA / コメント / 処理命令はどう扱われますか?
いずれも現在のインデント深さで、それぞれ独立した行にそのまま出力されます。CDATA ペイロードは <![CDATA[…]]> で囲まれ、内部の再インデントは行いません——仕様により CDATA の内容は不透明と定められており、フォーマッターは触れません。コメントは <!-- … -->、処理命令は <?target data?> を使います。3 種類いずれも 整形 → 最小化 → 整形 のラウンドトリップで内容は無傷で残ります。
XML のフォーマットと最小化の違いは?
フォーマットは人間が文書ツリーを読みやすいよう空白を広げ、最小化は転送と保存のために空白を取り除きます。どちらも生のバイト列ではなく解析後の DOM に対して動作するため、整形式の文書に対して 整形 → 最小化 のラウンドトリップを行うと、元の最小化形式とバイト等価な結果になります。XML を読んだり diff したりするときは整形を、従量課金 API ゲートウェイで送ったり別の文書に埋め込んだりするときは最小化を使ってください。
この XML フォーマッターは、ブラウザが AJAX XHR レスポンスや SVG 文書で使うのと同じパーサーを利用するため、整形式の XML——RSS、Atom、SOAP、sitemap、OOXML、SVG——はクリーンにラウンドトリップします。上に XML を貼り付け、出力をコピーするか .xml としてダウンロードしてください。