XML Formatter
XML Formatterの使い方|CDATA・コメントを保持して整形・圧縮
2026-01-26
まず、ここに貼ってください
レガシーAPIのSOAPレスポンス、RSSフィード、SVG、Configファイル。XML系で「読めない」「縮めたい」のいずれかなら、考える前に XML Formatter に貼ってください。
自作トークナイザでXML構造を解析するため、CDATAやコメントが破損しません。整形・圧縮どちらも <!CDATA[...]]> の中身は触りません。
即断テーブル
| 困っていること | 操作 | 補足 |
|---|---|---|
| 1行XMLを読みたい | 「整形」ボタン | インデント付き |
| 配信用にサイズを減らしたい | 「圧縮」ボタン | コメント削除 |
| インデントを揃えたい | 「インデント」を選択 | 2/4スペース・タブ |
このツールで解決できる3つの問題
1. 「SOAPレスポンスが1行で読めない」
<?xml version="1.0"?><soap:Envelope xmlns:soap="..."><soap:Body>...</soap:Body></soap:Envelope>
→ 貼り付けて「整形」をクリック
要素ごとに改行が入り、ネストに応じてインデントされます。<tag>text</tag> のような短い要素は1行のまま保持するのでスマートに見えます。
2. 「APIに送るXMLを最小化したい」
帯域削減や、署名検証のためにcanonicalな形が欲しいケース。
→ 貼り付けて「圧縮」をクリック
タグ間の空白を全削除、コメントを削除します。CDATAは保持されるので、署名対象データが壊れません。
3. 「SVGを編集したいのに改行ゼロで読めない」
最適化済みSVGはたいてい1行になっています。
→ 「整形」
<path d="M ..."/> のように長い属性は1行で残しつつ、<g> などのコンテナは適度に展開されます。
整形の挙動(重要)
<tag>text</tag> パターンはインライン
<note>
<to>太郎</to>
<from>花子</from>
</note>
整形すると以下のように1行に保たれます:
<note>
<to>太郎</to>
<from>花子</from>
</note>
これは「open → text → close(同じタグ名)」のパターンを検出してインライン化する実装になっているためです。HTMLとは違い、XMLでは「テキストノードと改行」を厳密に区別しないため、こちらの方が見やすくなります。
コメントは保持
<note>
<!-- 補足コメント -->
<body>...</body>
</note>
整形時はコメントを保持。圧縮時のみコメントは削除されます。
CDATAは整形・圧縮どちらでも保持
<file><![CDATA[<binary>data</binary>]]></file>
CDATAブロックの中身は整形・圧縮どちらでも変更されません。バイナリエンコードや署名対象が含まれていても安全。
圧縮の挙動
| 要素 | 動作 |
|---|---|
| タグ間の空白・改行 | 削除 |
コメント <!-- --> | 削除 |
<![CDATA[ ]]> | 保持 |
<?xml ?> 宣言 | 保持 |
処理命令 <? ?> | 保持 |
| テキストノード | 連続空白を1個に正規化 |
ボタンとオプション
| 項目 | 動作 |
|---|---|
| 整形 | XMLトークナイザで構造解析→インデント付き出力 |
| 圧縮 | コメント削除+空白除去 |
| インデント | 2スペース / 4スペース / タブ(整形時のみ) |
エラーが出たとき
| メッセージ | 原因 |
|---|---|
| コメントが閉じられていません | --> がない |
| CDATAが閉じられていません | ]]> がない |
| 処理命令が閉じられていません | ?> がない |
| 宣言が閉じられていません | <!DOCTYPE の閉じ > がない |
| タグが閉じられていません | > がない |
トークナイザレベルでのチェックなので、閉じ忘れ系のエラーは検出されます。属性の不正やDTD準拠チェックは行いません。
関連記事
| 記事 | 読むタイミング |
|---|---|
| XMLとHTMLの整形ルールの違い | HTMLとXMLで整形挙動が違う理由を知りたい |
| SOAP/RSS/SVGなど用途別のXML整形 | 自分のXMLがどのカテゴリか確認したい |