XML フォーマッター
XMLドキュメントを整形・圧縮。整形式でない箇所は行と列を表示します。無料、ブラウザ内で処理。
- ブラウザ内で処理
- データはブラウザ外に出ません
- 無料 · 登録不要
WeChat でスキャンしてシェア
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。
e-Gov 法令API の XML を読みやすくする
e-Gov 法令API Version 2(仕様の Swagger UI)は、response_format=xml を付けると XML で応答します。2026-10-08 に law_data/321CONSTITUTION?response_format=xml(日本国憲法)を取得したところ、応答の先頭部分は改行もインデントもなく続いていました。<attached_files_info/> の次にある <law_info> 要素をそのまま貼り付けた例です。
<law_info><law_type>Constitution</law_type><law_id>321CONSTITUTION</law_id><law_num>昭和二十一年憲法</law_num><law_num_era>Showa</law_num_era><law_num_year>21</law_num_year><law_num_type>Constitution</law_num_type><law_num_num>000</law_num_num><promulgation_date>1946-11-03</promulgation_date></law_info>
スペース2個で整形した結果:
<law_info>
<law_type>Constitution</law_type>
<law_id>321CONSTITUTION</law_id>
<law_num>昭和二十一年憲法</law_num>
<law_num_era>Showa</law_num_era>
<law_num_year>21</law_num_year>
<law_num_type>Constitution</law_num_type>
<law_num_num>000</law_num_num>
<promulgation_date>1946-11-03</promulgation_date>
</law_info>
同じ応答の <revision_info> には、空の要素が <abbrev></abbrev> と <amendment_enforcement_comment/> の2通りの書き方で混ざっています。次は、その中からいくつかの要素だけを抜き出した例です(途中の要素は省略)。
<revision_info><law_title>日本国憲法</law_title><law_title_kana>にほんこくけんぽう</law_title_kana><abbrev></abbrev><category>憲法</category><amendment_enforcement_comment/></revision_info>
<revision_info>
<law_title>日本国憲法</law_title>
<law_title_kana>にほんこくけんぽう</law_title_kana>
<abbrev/>
<category>憲法</category>
<amendment_enforcement_comment/>
</revision_info>
中身のない要素は、整形でも圧縮でも空要素タグ <abbrev/> にそろいます。XML としての意味は同じですが、元のファイルと文字列で差分を取ると、この行が変更として出ます。
文字コード宣言はそのまま残る
Shift_JIS で作られた古い XML を貼り付けると、XML 宣言の encoding="Shift_JIS" も一緒に入ります。貼り付けた時点で文字はすでに Unicode の文字列になっていますが、ツールは宣言を書き換えず、元の文字列のままコピーします。
<?xml version="1.0" encoding="Shift_JIS"?><商品><品名>緑茶</品名><価格>500</価格></商品>
<?xml version="1.0" encoding="Shift_JIS"?>
<商品>
<品名>緑茶</品名>
<価格>500</価格>
</商品>
この出力を UTF-8 のファイルとして保存すると、宣言と実際の文字コードが食い違います。XML 1.0 は、外部の情報(HTTP の Content-Type など)がない場合に、宣言と異なる文字コードで実体を渡すことを致命的エラーとしています(XML 1.0 §4.3.3)。UTF-8 で保存するなら、宣言を encoding="UTF-8" に直すか、宣言ごと削除してください。要素名に日本語を使うこと自体は問題ありません(XML 1.0 §2.3 の名前に使える文字の範囲に、かなと漢字が含まれます)。
日本語の文章とインライン要素
テキストの中に要素が入る文書では、整形で文字列が分かれます。日本語は単語の間に空白を入れないので圧縮では文字は失われませんが、整形すると文字列の途中に改行とインデントが入ります。
<p>東京都<b>港区</b>六本木</p>
<p>
東京都
<b>港区</b>
六本木
</p>
整形後の <p> の文字列には、改行とインデントの空白が含まれます。もう一度解析すると、元の「東京都港区六本木」ではなく、改行と空白をはさんだ文字列になります。圧縮すれば元の1行に戻りますが、文章を含む XML は整形結果で元のファイルを置き換えないでください。
よくあるエラー
このツールはブラウザの XML パーサーで入力を解析し、最初の整形式エラーで止まってブラウザのメッセージを表示します。よくある原因は次のとおりです。
| エラー | 例 | 直し方 |
|---|---|---|
| 閉じタグがない | <person><name>Alice</person> | <name> を </name> で閉じる |
| タグ名が一致しない | <b>bold</i> | 開始タグと終了タグを同じ名前にする(大文字小文字も区別) |
本文に & や < をそのまま書いた | <company>AT&T</company> | &、< と書く |
| ルート要素が 2 つある | <record/><record/> | <records> などの親要素で囲む |
| 属性値に引用符がない | <item id=42/> | 引用符で囲む:id="42" |
日本語入力をオンにしたまま打つと、タグの中に全角スペース(U+3000)が入ることがあります。2026-10-08 に Chrome 152 で確認したメッセージです。<item id="1"/> を入れると、ステータス欄に「エラー:」と error on line 1 at column 6: error parsing attribute name が出ます。XML の空白として使えるのは半角スペース、タブ、改行(CR と LF)だけで(XML 1.0 §2.3)、全角スペースは空白にも名前に使える文字にも当たらないため、要素名 item の直後で属性名の解析に失敗します。メッセージ本文はブラウザの英語のままで、Firefox では言い回しが変わります。
制限事項
- DOCTYPE で宣言した実体は展開されます。 XML 宣言と DOCTYPE(内部サブセットを含む)はそのまま出力しますが、そこで宣言した実体の参照(
&company;など)は置換後のテキストで書き出されます。 - テキストの前後の空白は削除されます。
xml:space="preserve"も反映されません。 - 空の要素の書き方が変わります。 整形では
<note></note>も<note> </note>も<note/>になります。圧縮では中身のない<note></note>は<note/>、空白だけの<note> </note>は<note></note>になります。 - XML 宣言の encoding は書き換えません。 保存するファイルの文字コードと合わせるのは利用者側です。
- 整形式のチェックのみです。 DTD や XML Schema による妥当性検証はしません。エラーは最初の1件だけ表示します。
FAQ
XMLの検証も行いますか?
整形式(well-formed)かどうかだけを確認します。ブラウザの DOMParser が最初のエラーで解析を止め、ステータス欄に「エラー:」とブラウザの英語メッセージ(行と列を含む)を表示します。Chrome 152 で確認した表示は error on line N at column M の1文です。Safari が同じ libxml2 の形式で返す場合も同じように読み取ります。Firefox はそのエラー表示の形式(XML Parsing Error … Line Number N, Column M)に合わせて解析し、1行目と行・列を表示しますが、Firefox では未確認です。XML Schema(XSD)や DTD による妥当性検証はしません。
CDATA セクションやコメントは残りますか?
残ります。CDATA セクション、コメント、処理命令、XML 宣言、DOCTYPE(内部サブセットを含む)は整形後も出力されます。要素の子が CDATA セクション1つだけのときは、整形すると CDATA が開始タグと終了タグの間の独立した行に置かれます。
名前空間(namespace)に対応していますか?
はい。x:v のような接頭辞付きの名前と xmlns 宣言は解析結果のまま書き出し、属性の順序も変えません。属性値はすべてダブルクォートで囲みます。
インデントは変えられますか?
「インデント」でスペース2個、4個、タブを選べます。入力中の自動整形は選択中のインデントを使います。選択を変えたあとは「フォーマット」を押すと、今の出力に反映されます。
テキストの空白が変わったのはなぜですか?
テキストの前後の空白を削除し、空白だけのテキストは捨てるためです。xml:space="preserve" も考慮しません。テキストと要素が混在すると、整形では文字列がそれぞれ別の行に分かれ、圧縮では前後の空白を除いた文字列がそのままつながります。
データはサーバーに送信されますか?
いいえ。XML はこのブラウザのタブ内で解析・整形し、サーバーへの送信もブラウザのストレージへの保存もしません。「フォーマット」または「圧縮」を押すと、ページの統計にツール名とその操作が記録されますが、XML の内容は含みません。