CreaTools LogoCreaTools
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がどのカテゴリか確認したい