XMLフォーマッター&ミニファイアー

XMLを貼り付けて瞬時にフォーマット、美化、ミニファイします。

データはデバイスを離れません

使い方

  1. 入力エリアにXMLを貼り付けます。
  2. 美化するにはフォーマット、圧縮するにはミニファイをクリックします。
  3. 結果をコピーまたはダウンロードします。

よくある質問

XMLにエラーが含まれている場合はどうなりますか?

ツールはブラウザに組み込まれたDOMParserを使ってXMLを検証します。構文エラーは出力の上の赤いボックスに表示されます。

CDATAセクション、コメント、処理命令をサポートしていますか?

はい。フォーマッタはCDATAセクション、コメント、処理命令を含むすべてのXMLノードタイプを保持します。

サイズ制限はありますか?

厳密な制限はありません · ブラウザのメモリに依存します。数MBのXMLファイルは通常瞬時にフォーマットされます。

XMLの実践的な概要

XML 1.0は1998年2月10日にW3C勧告となった。編集者はTim Bray、Jean Paoli、C. M. Sperberg-McQueenで、ワーキンググループはSunのJon Bosakが議長を務めた。Tim Brayのローンチ時のコメントがその設計意図を捉えている:「XMLは拡張可能で、国際化されていて、堅牢でシンプルで、Web向けに作られている。」現在の正式バージョンは第5版(2008年11月26日公開、Bray、Paoli、Sperberg-McQueen、Eve MalerおよびFrançois Yergeau編集)だ。XMLはSGML(ISO 8879:1986)から直接派生している。SGMLははるかに大きく実装が難しいドキュメントフォーマットで、XMLはほとんどの使用頻度の低い部分を削ぎ落としながらドキュメントモデルを維持した。

2026年にXMLが現役の場所

JSONは10年以上にわたりREST APIペイロードを席巻してきたが、スキーマの厳密さ、ドキュメントセマンティクス、または確立された標準が要求される場所ではXMLが依然として根強く使われている。どのような場面でXMLに出会うかを知ることが、優れたフォーマッターの価値の半分を占める:

整形式と妥当性:この2つは異なる

XMLには2つの異なる適合レベルがあり、混同しやすい:

このフォーマッターは整形式チェックのみを行う。ブラウザ組み込みのDOMParserparsererror要素を通じて最初に検出したパースエラーを報告し、ツールはそれを赤いエラーボックスに表示する。スキーマに対する妥当性検証には別のツールが必要だ(XSD向けのSaxon、libxml2のxmllint --schema、W3C XMLバリデーターサービスなど)。

5つの定義済みエンティティ参照

W3C XML 1.0 §4.6によると、「整形式ドキュメントは以下のエンティティを宣言する必要がない」:ampltgtaposquot。末尾のセミコロンは必須で、一部のHTML用法と異なり、XMLは&ampを末尾の;なしに決して受け付けない。

エンティティ文字使用が必要な場面
&lt;<要素コンテンツでは常に必要(そうしないとタグが開始してしまうため)
&amp;&常に必要(そうしないとエンティティ参照が開始してしまうため)
&gt;>コンテンツ中の]]>シーケンスの内側で必須。その他の場所では対称性のために推奨
&apos;'単一引用符で区切られた属性値の内側
&quot;"二重引用符で区切られた属性値の内側

CDATAセクション、コメント、処理命令

XMLをフォーマットする人なら誰でもいずれ出会う3つの特殊な構文機能:

名前空間

XMLの名前空間メカニズムは、複数のボキャブラリーが1つのドキュメント内で共存できる仕組みだ。AtomとカスタムExtension、SOAPとWS-Securityヘッダー、OOXMLのメインドキュメントパートと関連する名前空間からの関係、図面、画像などが共存できる。構文はデフォルト名前空間にxmlns="…"、プレフィックス付きにxmlns:prefix="…"で、フォーマッターは両方を変更せずに保持する。名前空間URIは識別子であってURLではなく、何かを解決する必要はない。

有名なXMLセキュリティの落とし穴2つ

Billion Laughs攻撃。再帰的に展開するエンティティを持つ小さなXMLファイルは、パーサーのメモリ内で数十億文字に膨れ上がることがある:

<!ENTITY lol "lol">
<!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
<!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
<!-- … nine more layers later, the document expands to 10^9 lols -->

現代のパーサーはこれを防ぐためにエンティティ展開に上限を設けている。XXE(XML External Entity)攻撃は、外部エンティティを解決してローカルファイルを読み取る(<!ENTITY xxe SYSTEM "file:///etc/passwd">)か、サーバーからSSRFリクエストを引き起こすパーサーを悪用する。OWASPのXXE防止チートシートは明確だ:「XXEを防ぐ最も安全な方法は、DTD(外部エンティティ)を常に完全に無効にすることだ。」ブラウザのDOMParserはまさにそれを実行しており、DOCTYPEエンティティ宣言を完全に無視する。これがクライアントサイドのフォーマッターが信頼できないXMLを安全に処理できる理由だ。

整形(Pretty-Print)とミニファイ

xml:space属性は、ドキュメントに埋め込まれたソースコードをそのままにする必要がある場合など、ホワイトスペースが本当に重要な場面でのエスケープハッチだ。先祖要素にxml:space="preserve"を設定すると、準拠プロセッサーはすべてのスペースと改行を子孫要素においてバイト単位で保持する。

フォーマッターが検出するよくあるXMLエラー

  1. テキストコンテンツにエスケープされていない&裸のアンパサンドは常に無効だ。&amp;を使うこと。
  2. タグの不一致または未閉鎖。最もよくあるパースエラー。すべての<tag>には対応する</tag>が必要だ(または自己終了形式<tag/>を使用する)。
  3. 複数のルート要素。XMLドキュメントは最外部要素がちょうど1つ必要だ。トップレベルに兄弟要素が2つある場合は親要素で囲む。
  4. エンコーディングの不一致。<?xml version="1.0" encoding="UTF-8"?>宣言はファイルの実際のバイトエンコーディングと一致しなければならない。UTF-8宣言付きのUTF-16 BOMはこのバグの典型的な例だ。
  5. 属性値の予約文字。<tag attr="a<b"><が引用符内で無害に見えても無効だ。
  6. XML宣言の前に迷子のBOM。一部のテキストエディターは厳密なパーサーを混乱させるUTF-8 BOMをサイレントに挿入する。
  7. xml:space="preserve"領域内の混在した改行コード。CR / LF / CRLFが混在すると、異なるプラットフォームを往復する際に目に見えるホワイトスペースの不具合が生じる可能性がある。

よくある質問

XMLのフォーマットで出力が生成されないのはなぜか?

ほとんどの場合、入力が整形式でないためだ。出力の上のエラーボックスにブラウザのDOMParserが検出した最初のパースエラーが表示される。通常は欠落または不一致のタグ、エスケープされていない&、またはルート要素の欠落だ。エラーを修正して再実行する。

XMLはサーバーにアップロードされるか?

いいえ。整形とミニファイはどちらもブラウザ組み込みのDOMParserと小さなJavaScriptシリアライザー内で実行される。XMLはページから外に出ることはなく、認証情報、内部URL、または機密の顧客データが含まれる可能性があるSOAPペイロードや設定ファイルにとって重要だ。

ツールはXSDまたはDTDスキーマに対して検証できるか?

いいえ。スキーマ検証はスキーマファイルの読み込みと参照の解決が必要で、ブラウザが行う整形式チェックとは別の問題だ。XSD検証にはコマンドラインでSaxonまたはxmllint --schemaを使うか、W3C XML Schemaバリデーターサービスを使う。

XMLは2026年もまだ有用か、それともJSONを使うべきか?

何をするかによる。新しいREST APIにはJSONがほぼ常に正しい選択だ。しかしXMLはOfficeドキュメント(.docx.xlsx)、エンタープライズメッセージング(SOAP、金融標準)、Androidリソース、EPUB、RSS / Atom、SVG、および規制業界のほとんどの交換フォーマットでは依然としてデフォルトだ。XMLを読み取り、フォーマットし、検証する方法を知ることは依然として基本スキルだ。ただしJSONのように毎日の最初のツールではない。

「すべてのノード型を保持」とはフォーマッターにとって何を意味するか?

CDATAセクション、コメント、処理命令はすべて入力に表示されるとおりに保持され、フォーマッターは要素間のホワイトスペースのみを変更する。<![CDATA[ if (a < b) { … } ]]>ブロックはその内容にエスケープが必要な<文字が含まれていても、バイト単位でラウンドトリップする。

関連ツール

無料の JSON フォーマッタ&バリデータ・オンライン JSON→YAML変換 SQLフォーマッタ