本文へスキップ
App Museum
English

XML整形・圧縮ツール

1行につながったXMLを、字下げをつけた読みやすい形に整形します。字下げはスペース2つ・4つ・タブから選べ、1行に圧縮することもできます。タグの閉じ忘れなどの誤りは、行と位置を示します。XPathの式で要素や属性を抜き出すこともできます。ブラウザ内で完結。

出力の形

要素 9個・階層の深さ 3・13行

XPathで抜き出す

例

使い方

  1. 「XML」の欄に、整形したいXMLを貼り付けます
  2. 「出力の形」で、字下げの幅(スペース2つ・スペース4つ・タブ)か、1行への圧縮を選びます
  3. 下の「結果」に、整形したXMLが表示されます。「結果をコピー」でクリップボードに入ります
  4. 一部の要素や属性だけを取り出したいときは、「XPathで抜き出す」の「XPath式」に、//book/title のような式を入れます

ボタンを押す必要はありません。入力や出力の形を変えるたびに、結果がその場で変わります。ページを開いた時点では、例のXMLが入っています。

結果の下には、要素の数、階層の深さ、行数が表示されます。XMLに誤りがあるときは、入力欄の下に、誤りのある行と位置、その内容が表示されます。「入力欄のこの位置を選ぶ」を押すと、入力欄の中の誤りの部分が選ばれます。

具体例

ページを開いたときに入っている次のXMLを例にします。APIの応答やログでよく見る、1行につながった形です。

<?xml version="1.0" encoding="UTF-8"?><catalog><book id="b1" lang="ja"><title>吾輩は猫である</title><author>夏目漱石</author><price currency="JPY">660</price></book><book id="b2" lang="ja"><title>銀河鉄道の夜</title><author>宮沢賢治</author><price currency="JPY">473</price></book></catalog>

「整形(スペース2つ)」では、次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <book id="b1" lang="ja">
    <title>吾輩は猫である</title>
    <author>夏目漱石</author>
    <price currency="JPY">660</price>
  </book>
  <book id="b2" lang="ja">
    <title>銀河鉄道の夜</title>
    <author>宮沢賢治</author>
    <price currency="JPY">473</price>
  </book>
</catalog>

結果の下には「要素 9個・階層の深さ 3・13行」と表示されます。

「圧縮(1行)」を選ぶと、整形したXMLを元の1行の形に戻せます。

整形のしかた

  • 要素 — 子に要素を持つ要素は、開始タグ、子、閉じタグをそれぞれ別の行に置き、子を1段深く字下げします
  • 文字だけを持つ要素 — <title>吾輩は猫である</title> のように、開始タグから閉じタグまでを1行に置きます
  • 文字の前後の空白 — 文字だけを持つ要素では、文字の前後にある空白を、改行を含むときだけ字下げとみなして取り除きます。<a> 値 </a> のように1行の中に書かれた空白は、内容として残します。文字の途中にある改行や空白は変えません
  • 文字とタグが混ざった内容 — <p>これは<b>重要</b>です</p> のように、文字とタグが並んでいる要素の中身は、前後の空白や改行も含めて、書かれたとおりに残します。タグを別の行に移すと、文字に空白が加わってしまうためです
  • タグの間の空白 — タグとタグの間にある空白は、改行を含むときだけ字下げとみなして入れ直します。<b>東京</b> <b>大阪</b> のように、1行の中でタグの間に書かれた空白は、語の区切りかもしれないので内容として扱い、その要素の中身は書かれたとおりに残します
  • 属性 — 属性の間の空白と改行を、スペース1つにそろえます。属性の順序、値、引用符の種類(" と ')は変えません
  • 空の要素 — <a/> と <a></a> は、書かれた形のまま残します。<a /> は <a/> になります
  • コメント・処理命令・DOCTYPE — それぞれ1行に置き、中身は変えません。複数行のコメントは、2行目以降の字下げを元のまま残します
  • CDATAセクション — <![CDATA[ … ]]> の中身は変えません
  • xml:space="preserve" — この属性を持つ要素の中身は、空白を含めて書かれたとおりに残します
  • 参照 — &amp; や &#x3042; などは、文字に置き換えず、書かれたとおりに残します
  • 改行と先頭 — 改行は LF にそろえます。先頭のバイト順マーク(BOM)と、XML宣言の前の空白は取り除きます

整形した結果をもう一度整形しても、同じ結果になります。

圧縮のしかた

「圧縮(1行)」は、タグとタグの間にある、改行を含む空白を取り除きます。取り除くのは、整形で字下げを入れ直す場所と同じです。1行の中でタグの間に書かれた空白、文字の途中の空白、文字とタグが混ざった内容、コメント、CDATAセクションはそのまま残すので、文字の中に改行があるXMLでは、結果が1行にならないことがあります。

コメントは取り除きません。

XPathで抜き出す

「XPath式」に式を入れると、入力したXMLから式に合う部分だけを抜き出して一覧にします。式やXMLを変えるたびに、その場で結果が変わります。「例」のボタンを押すと、ページを開いたときのXMLに合う式が入ります。

  • //book/title — すべての book 要素の中にある title 要素
  • //book/@id — すべての book 要素の id 属性
  • //book[price > 500]/title — price が500より大きい book の title
  • count(//book) — book 要素の数

抜き出した結果は、XMLの中の順に番号をつけて並べます。

  • 要素 — 要素ごとに、「出力の形」で選んだ字下げで整形して表示します。「圧縮(1行)」を選んでいるときは、圧縮した形で表示します。xml:space="preserve" を持つ要素の中にある要素は、整形と同じく、空白を含めて書かれたとおりに表示します
  • 属性 — id=b1 のように名前と値を表示します
  • 文字 — 文字をそのまま表示します。空白や改行だけの文字は「(空白だけの文字)」と表示します
  • コメント・処理命令 — 書かれた形で表示します
  • 数値・文字列・真偽値 — count() や string()、price > 500 のような比較など、結果が要素の並びではない式は、種類と値を表示します。1 div 0 は Infinity、数値として読めないものは NaN になります

表示するのは最初の100件までです。「抜き出した結果をコピー」では、全件を改行で区切ってクリップボードに入れます。要素は表示と同じく整形した形、属性は値だけが入ります。

XPathを使うときの注意

XPathの読み取りには、ブラウザに組み込まれたXMLパーサーとXPath(XPath 1.0)を使います。そのため、整形とは次の点が違います。

  • 書き直した形で表示します — 抜き出した要素は、ブラウザが読んだ内容から書き直したものです。&#x3042; のような文字参照は文字(あ)に置き換わり、文字の中の > は &gt; になり、外側の要素で宣言された名前空間(xmlns)は、抜き出した要素に付け直されます
  • ブラウザが読めないXML — 整形できるXMLでも、宣言されていない名前空間の接頭辞(ns:a)や、&nbsp; のように定義されていない参照があると、ブラウザのパーサーが読めないため、XPathは使えません。そのときは、ブラウザが示した誤りの内容もあわせて表示します
  • 名前空間の接頭辞 — 式の中では、XMLの中で宣言されている接頭辞を使えます。同じ接頭辞が場所によって別の名前空間に宣言されているときは、XMLの中で最初の宣言を使います。宣言されていない接頭辞を書くと、エラーになります
  • 既定の名前空間 — xmlns="…" で既定の名前空間が宣言された要素は、//book のような接頭辞のない名前では選べません。XPath 1.0 の決まりです。//*[local-name()='book'] のように書きます。見つからなかったときに既定の名前空間があれば、このことを案内します
  • 対応していないもの — XPath 2.0 以降の関数や、namespace:: 軸には対応していません

エラーが表示されるとき

XMLとして読めないときは、整形せずに、最初に見つかった誤りを1つ表示します。位置は「4行目 3文字目」のように示します。

その下には、誤りのある行を行番号つきで抜き出し、誤りの部分(</d> のようなタグ、& のような1文字など)に印をつけて表示します。長い行は、印の前後だけを表示し、省いた部分を「…」で示します。空白に見える全角スペースなどの文字は、U+3000 のように文字の番号で示します。

「入力欄のこの位置を選ぶ」を押すと、入力欄の中の同じ部分が選ばれた状態になり、そこまでスクロールします。そのまま入力すると、選んだ部分を書き換えられます。閉じタグが対応していないときは、「開始タグ(2行目)を選ぶ」で、開いたままのタグの側も選べます。

  • 閉じタグが対応していない — <b> を開いたまま </d> で閉じた場合などです。開いているタグの名前と行を合わせて表示します。タグの名前は大文字と小文字を区別するので、<Item> を </item> で閉じることはできません
  • タグが閉じられていない — 最後まで閉じタグが出てこなかった要素を示します
  • < の後ろがタグの名前として読めない — 1 < 2 のように、文字として < を書いた場合です。&lt; と書きます
  • & がそのまま書かれている — Tom & Jerry や、属性の中のURL ?a=1&b=2 などです。&amp; と書きます
  • 文字の中に ]]> がある — CDATAセクションの終わりを表す ]]> は、ふつうの文字の中には書けません。> を &gt; と書きます
  • 属性の書き方 — <a x=1> のように値が引用符で囲まれていない、<input disabled> のように値がない、属性の間に空白がない、同じ属性が2回ある、値の中に < がある、といった場合です
  • ルート要素 — いちばん外側の要素が2つ以上ある、要素の外に文字がある、要素が1つもない、といった場合です
  • コメント・CDATAセクション・処理命令・DOCTYPE・タグが閉じられていない — 開いた場所を示します
  • XML宣言とDOCTYPEの位置 — <?xml … ?> が先頭にない、DOCTYPEがルート要素より後ろにある、2つある、といった場合です

誤りを1つ直すと、次の誤りが表示されることがあります。

このツールが調べないこと

このツールが調べるのは、タグと属性の書き方が合っているかどうか(整形式かどうかの主な部分)です。次のことは調べません。

  • DTDやXMLスキーマ(XSD)に合っているかどうか
  • &nbsp; のような名前つきの参照が定義されているかどうか。&名前; の形になっていれば通します
  • ns: のような名前空間の接頭辞が宣言されているかどうか
  • XML宣言の中身(version や encoding の値)
  • XMLで使えない制御文字が含まれていないか、コメントの中に -- がないか

エラーが出なかったことは、そのXMLを受け取る側のプログラムが必ず読めることを保証しません。

FAQ

整形すると、XMLの内容は変わりますか?

変わるのは、タグの間にある改行つきの空白、属性の間の空白、文字だけを持つ要素の中で文字の前後にある改行つきの空白です。要素の順序、属性の順序と値、文字、コメントは変えません。多くのXMLでは、タグの間の空白は意味を持たないので、整形しても同じデータとして読まれます。ただし、空白をそのまま受け取るプログラムもあります。空白に意味があるXMLでは、対象の要素に xml:space="preserve" を付けると、その中身は書かれたとおりに残ります。

HTMLも整形できますか?

XMLの書き方に合っているHTML(XHTML)は整形できます。ふつうのHTMLは、<br> や <img> のように閉じないタグ、<input disabled> のように値のない属性、引用符のない属性値を含むことが多く、その場合はエラーになります。

文字として < や & を書くには、どうすればよいですか?

< は &lt;、& は &amp; と書きます。属性の値の中で引用符を書くときは、" を &quot;、' を &apos; と書けます。プログラムのコードのように < や & が多い文字は、<![CDATA[ と ]]> で囲むと、そのまま書けます。HTMLの文字を置き換えるには、HTMLエスケープ・アンエスケープツールが使えます。

<a/> と <a></a> は違うものですか?

XMLとしては、どちらも中身のない要素で、同じ意味です。このツールは、どちらに寄せることもせず、書かれた形のまま残します。

文字とタグが混ざった要素が、整形されずに長い1行のまま残ります

仕様です。<p>これは<b>重要</b>です</p> の <b> を別の行に移すと、「これは」と「重要」の間に改行と空白が加わり、文章として読むプログラムでは結果が変わります。内容を変えないことを優先して、文字とタグが混ざった要素の中身には手を加えません。

<a> <b>1</b> <c>2</c> </a> のように、1行の中でタグの間に空白が書かれている要素も、同じ理由でそのまま残ります。この空白が不要な場合は、空白を消すか、タグの間で改行してから貼り付けると、字下げがつきます。

XPathで書いたのに、要素が見つかりません

多い原因は2つです。1つは、XMLに既定の名前空間(xmlns="…")があることです。この場合は //*[local-name()='book'] のように書きます。もう1つは、大文字と小文字の違いです。XMLの名前は大文字と小文字を区別するので、<Book> は //book では選べません。

JSONやYAMLに変換できますか?

このツールはXMLの整形と圧縮だけを行います。JSONの整形にはJSON整形ツール、JSONとYAMLの変換にはJSON⇔YAML変換ツールが使えます。

大きなXMLも整形できますか?

大きさの上限は設けていません。ただし、入力や出力の形を変えるたびに全体を読み直すので、大きなXMLでは反応が遅くなることがあります。要素の入れ子は1000階層までです。

入力したXMLは、どこかに送信されたり保存されたりしますか?

いいえ。整形はすべてブラウザの中で行い、入力したXMLをサーバーに送ることも、ブラウザに保存することもありません。ページを読み込み直すと、入力は消えます。

種別
ユーティリティ
カテゴリ
開発者向け
タグ
xml
formatter
minify
pretty-print
validator
xpath
developer
  • カラーコード変換ツール

    HEX・RGB・HSL のカラーコードを相互に変換し、HSV・CMYK・OKLCH の表記も表示。カラーピッカーやプレビューで確認でき、白・黒や指定した文字色とのコントラスト比(WCAG)も分かります。

    ユーティリティ開発者向けcolorhexrgbhslhsvcmykoklchcontrastcontrast-checkerwcagconverterdeveloper
  • chmod計算ツール(パーミッション変換)

    Linux・macOS のファイルのパーミッションを、755 のような数値と rwxr-xr-x のような記号のあいだで変換します。r・w・x のマスを押して読み取り・書き込み・実行を選ぶと、chmod コマンドがその場でできあがります。setuid・setgid・スティッキービットにも対応し、umask から新しいファイルとディレクトリの権限も出せます。

    ユーティリティ開発者向けchmodpermissionlinuxunixoctalumaskcalculatordeveloper
  • docker run → Docker Compose 変換ツール(compose.yaml 作成)

    docker run のコマンドを貼るだけで compose.yaml に変換。ポート・環境変数・ボリューム・ネットワーク・ヘルスチェック・GPU など docker run の全オプションを読み取り、複数のコマンドを1つのファイルにまとめます。$(pwd) や $ の書き換え、Compose に無いオプションも知らせます。

    ユーティリティ開発者向けdockerdocker-composecomposeyamlcontainerconverterdeveloper