コンテンツへスキップ

XMLを整形

ぎっしり詰まったXMLを読める形にインデントしたり、1行に圧縮し直したりできます。コメント、CDATAセクション、名前空間はそのまま残ります。データは保存されません。

  • 保存しません
  • 順番待ちなし
  • 登録不要・透かしなし
インデント
整形結果

整形されたXMLがここに表示されます。

使い方

1

XMLを貼り付け

または.xml、.svg、.rss、.xsdファイルをドロップします。データは保存されません。

2

インデントを選ぶ

スペース2つ、4つ、タブ、または1行に圧縮。

3

コピーまたはダウンロード

XMLが壊れている場合は、結果の代わりに行と列が表示されます。

XMLのインデントし直しが見た目より危うい理由

XMLでは、空白はデフォルトで意味を持ちます。多くの人がつまずくのはここです。整形しても何も変わらないJSONと違い、XMLパーサーは要素の間のスペースや改行をテキストの内容として報告しなければなりません。それを無視してよいと定めるのは、スキーマがあればスキーマです。つまりインデントし直すと文書は実際に変わります。設定ファイルやデータファイルの多くでは誰も気にしませんが、XHTMLやDocBookのように、テキストと要素が並んで存在する混合コンテンツを含む文書では、文書の内容そのものが変わることがあります。

そのため、ここでの整形は、手を付けてはいけない部分には手を付けません。xml:space="preserve" を持つ要素は、中身を書かれたとおりに保持します。この属性はまさにそれを示すために存在するからです。CDATAセクションは一切変更せずにそのまま通します。CDATAは解釈されてはならないテキストを入れるためのもので、その中を整形すると内容が壊れてしまいます。エンティティ参照も、それが表す文字に展開せず、参照のまま残します。

名前空間は、接頭辞、宣言、それが結び付いた要素まで、書かれたとおりそのまま保持されます。当たり前に聞こえますが、そうではありません。接頭辞を正規化したり、宣言を「あるべき」場所に移動したりする整形ツールは、技術的には等価でも、接頭辞を文字どおりに照合するツールでは通らない文書を作ってしまいます。XMLでは属性の順序に意味はありませんが、同じ理由で順序も保持します。見た目の整い方より、前のバージョンとの差分が取れることのほうが価値があるからです。

整形の際にチェックするのは整形式(well-formed) かどうかです。すべてのタグが閉じられ、正しく入れ子になっていること、ルート要素が1つであること、使用できる文字であること、アンパサンドと山かっこが正しくエスケープされていること。これはXMLの2つの基準のうち低いほうです。整形式として完璧でも、その文書を規定するDTDやスキーマに対しては無効ということはあり得ますし、それは整形をいくら重ねても分かりません。

ほかの目的には

xmllint --format in.xml はコマンドラインで同じことを行い、ほとんどのUnix系システムにすでに入っています。xmlstarlet fo --indent-tab ならインデントをより細かく制御できます。どちらも、ページがメモリに保持できるよりはるかに大きなファイルを扱えます。

文書を比較、署名、または正規化して保存する必要があるなら、整形はまったく適さない操作です。Canonical XML(xmllint --c14n)は、等価な2つの文書が同じ形に行き着く唯一の正規化形式を作り出します。XMLのデジタル署名はこれに依存しています。署名済みの文書を整形すると署名が壊れます。これを学ぶには最も高くつく方法です。

よくある質問

XMLはどこかに保存されますか?

いいえ。サーバーとの通信もログもなく、何も保存されません。ページを読み込んだ後はインターネットを切断しても動作します。これは見た目以上に重要です。オンライン整形ツールに貼り付けられるのは、APIレスポンス、設定ファイル、エラーのペイロードで、そこにはトークン、顧客データ、社内のホスト名が日常的に含まれています。

整形しても何が残りますか?

コメント、CDATAセクション、処理命令、XML宣言、すべての名前空間接頭辞です。属性の順序も書かれたとおりに保たれます。テキストだけを含む要素は1行のままにします。<title>Hello</title>を3行に分けても見やすくはなりませんし、混合コンテンツの文書では、テキストの内容そのものが変わってしまうからです。

インデントするとXMLの意味は変わりますか?

ほかの要素だけを含む要素なら、変わりません。ただしXMLには、空白に意味がないという一般的な規則はありません。テキストと要素が並んで存在する混合コンテンツでは、追加された空白はテキストの一部になります。ここでテキストだけの要素を分割せず1行のままにしているのはそのためです。文書に本当の混合コンテンツがあり、空白が意味を持つなら、圧縮のほうが安全な操作です。

HTMLにも使えますか?

HTMLが整形式のXMLである場合に限ります。実際のHTMLのほとんどはそうではありません。閉じていない<br>、<img>、<li>タグ、引用符のない属性、単独のアンパサンドは、どれもHTMLとしては正しく、XMLとしては無効です。ここで使っているのは厳密なXMLパーサーなので、推測せずにエラーとして報告します。XHTMLとSVGは問題なく整形できます。

SVGはどうですか?

使えます。SVGはXMLなので、圧縮されたSVGを読むのに適した方法です。パス、グラデーション、埋め込みのスタイルはすべてそのまま残り、動くのは要素の間の空白だけです。

サイズの上限はありますか?

こちらで設けた上限ではなく、使用可能なメモリ次第です。数MBの文書なら一瞬で整形できます。非常に大きな文書は、一度に保持できる量によって制限されるだけで、こちら側の制限はありません。

ご注意: チェックするのは整形式かどうかだけです。タグの対応、正しい入れ子、使用できる文字を確認してインデントし直しますが、DTDやXSDの取得や適用は行いません。そのため、きれいに整形できてもスキーマに対しては無効なファイルもあり得ます。名前空間は書かれたとおりそのまま保持されます。

このツールをあなたのサイトに設置

ブログ、授業のページ、ヘルプ記事などに無料で設置できます。コードを1つ貼り付けるだけで、訪問者がそのページ上でツールを使えるようになります。