ToolDeck

XMLフォーマッター

XMLをフォーマットして構文ハイライト付きで見やすく表示

サンプルを試す

XML入力

フォーマットされたXML

ローカルで実行 · シークレットの貼り付けも安全
フォーマットされたXMLはここに表示されます…

XMLフォーマットとは?

XMLフォーマット(XMLプリティプリントやXML整形とも呼ばれます)とは、XMLドキュメントに一貫したインデントと改行を追加し、階層構造を視覚的に分かりやすくするプロセスです。API、設定ジェネレーター、シリアライザーから出力される生のXMLは、タグ間に空白を持たない1行形式で提供されることがよくあります。XMLフォーマッターはそのドキュメントをツリーとして解析し、予測可能な間隔で再シリアライズします。

XML 1.0仕様(W3C勧告、第5版)は厳格な文法を定義しています。すべての開始タグには対応する終了タグまたは自己終了タグが必要で、属性値はクォートで囲まれなければならず、5つの文字(<、>、&、"、')はエンティティエスケープが必要です。フォーマッターはこれらのルールを守りながら、ドキュメントの情報セット(infoset)を変えない「意味のない空白」のみを挿入する必要があります。

フォーマットされたXMLはコードレビューで読みやすく、バージョン管理での差分確認が容易で、サービスが予期しないデータを返した際のデバッグも簡単です。フォーマット操作自体は可逆的です。ドキュメントの論理的な内容は変わらず、見た目のみが変化します。git diffやプルリクエストのレビュープラットフォームは変更された行のみを表示するため、一貫したインデントのXMLは実際の変更のみを差分に反映し、フォーマット変更のノイズを排除します。

Before · xml
After · xml
<catalog><book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title><genre>Computer</genre><price>44.95</price><publish_date>2000-10-01</publish_date></book><book id="bk102"><author>Ralls, Kim</author><title>Midnight Rain</title><genre>Fantasy</genre><price>5.95</price><publish_date>2000-12-16</publish_date></book></catalog>
<catalog>
  <book id="bk101">
    <author>Gambardella, Matthew</author>
    <title>XML Developer's Guide</title>
    <genre>Computer</genre>
    <price>44.95</price>
    <publish_date>2000-10-01</publish_date>
  </book>
  <book id="bk102">
    <author>Ralls, Kim</author>
    <title>Midnight Rain</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    <publish_date>2000-12-16</publish_date>
  </book>
</catalog>

オンラインXMLフォーマッターを使う理由

XMLを手動でフォーマットするのは、特に深いネストや混在した名前空間を持つドキュメントでは、ミスが多く時間もかかります。ブラウザベースのフォーマッターはファイルサイズに関わらず1秒以内に結果を提供します。

即時プリティプリント
XMLを貼り付けるかタイプするだけで、インデントされた出力がすぐに表示されます。CLIツールのインストールやビルドステップの実行を待つ必要はありません。
🔒
プライバシー優先の処理
すべての解析とフォーマットはDOMParser APIを使用してブラウザ内で行われます。XMLがマシンの外に出ることはなく、いかなるサーバーにも送信されません。
🎨
設定可能なインデント
2スペース、4スペース、タブインデントから選択でき、設定ファイルを編集せずにプロジェクトのコーディング規約に合わせられます。
📋
アカウントやインストール不要
ページを開いてXMLを貼り付け、結果をコピーするだけです。サインアップフォーム、デスクトップソフトウェア、ブラウザ拡張機能は一切不要です。

XMLフォーマッターの使用例

フロントエンド開発
CMSから返されるSVGマークアップやXHTMLフラグメントを確認します。生の出力をフォーマットすることで、特定の属性やネストされたグループを素早く見つけられます。
バックエンドエンジニアリング
サードパーティサービスからのSOAPレスポンス、RSSフィード、XML-RPCペイロードをデバッグします。プリティプリントされた出力により、欠けている要素や誤った名前空間を追跡できます。
DevOpsとCI/CD
インデントなしで機械生成されたMavenのpom.xmlファイル、Antビルドスクリプト、.csprojプロジェクトファイルを読み込みます。コミット前にフォーマットして差分をきれいに保ちます。
QAとテスト
統合テストで期待値と実際のXMLペイロードを比較します。両側を同じインデントスタイルにフォーマットすることで、空白の違いによる偽陰性を排除できます。
データエンジニアリング
データベース、ETLパイプライン、政府のオープンデータポータルからのXMLエクスポートを確認します。フォーマットされたXMLはXSLT変換やXPathクエリを書く前にレコード構造を明らかにします。
XMLの学習
W3C XMLチュートリアルを学ぶ学生は、演習ファイルをフォーマッターに貼り付けて、ネストと属性の構文が正しいか確認できます。

XML定義済みエンティティ参照

XMLは構文のために5つの文字を予約しています。これらの文字がテキストコンテンツや属性値として現れる場合、定義済みエンティティ参照に置き換える必要があります。正しいフォーマッターはプリティプリント中にこれらのエンティティを保持します。

文字XMLでの役割エンティティ
<Start of tag&lt;
>End of tag&gt;
&Start of entity&amp;
"Attribute delimiter&quot;
'Attribute delimiter&apos;

XMLインデントスタイルの比較

XMLインデントに単一の標準はありません。選択はチームの規約とパイプラインのツールに依存します。以下は最もよく使われる3つのスタイルです。

2スペース(推奨)
SVG、XHTML、SOAP、Spring設定など、Web関連XMLで最も一般的な選択肢です。深くネストされたドキュメントをコンパクトに保ちます。ほとんどのオンラインフォーマッターとIDEでデフォルトで使用されています。
4スペース
ネストが3〜4レベルを超えることがほとんどないJavaエコシステム(Maven、Ant、Androidマニフェスト)で好まれます。JavaとC#コードのデフォルトインデントと一致します。
タブ文字
各開発者がエディターで自分の視覚的な幅を設定できます。レガシープロジェクトや一部のMicrosoftツール(.csproj、.nuspec)で一般的です。スペースよりもファイルサイズが小さくなります。

コード例:XMLをプログラムでフォーマット

スクリプトやビルドプロセスの中でXMLをフォーマットする必要がある場合、主要な言語には組み込みまたは標準ライブラリのオプションがあります。以下はそのままコピーして使える実用的なサンプルです。

JavaScript (DOM API)
const raw = '<root><item>hello</item></root>'
const parser = new DOMParser()
const doc = parser.parseFromString(raw, 'application/xml')
const serializer = new XMLSerializer()
const xml = serializer.serializeToString(doc)

// Indent with XSLT (browser-native approach)
const xslt = new DOMParser().parseFromString(`
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="node()|@*">
      <xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>
    </xsl:template>
  </xsl:stylesheet>`, 'application/xml')

const proc = new XSLTProcessor()
proc.importStylesheet(xslt)
const formatted = proc.transformToDocument(doc)
console.log(new XMLSerializer().serializeToString(formatted))
// → <root>\n  <item>hello</item>\n</root>
Python
import xml.dom.minidom

raw = '<root><item>hello</item><item>world</item></root>'
dom = xml.dom.minidom.parseString(raw)
print(dom.toprettyxml(indent='  '))
# → <?xml version="1.0" ?>
# → <root>
# →   <item>hello</item>
# →   <item>world</item>
# → </root>

# With lxml (handles namespaces, XSD, large files)
from lxml import etree
tree = etree.fromstring(raw.encode())
print(etree.tostring(tree, pretty_print=True).decode())
Go
package main

import (
    "encoding/xml"
    "fmt"
    "strings"
)

func formatXML(raw string) (string, error) {
    decoder := xml.NewDecoder(strings.NewReader(raw))
    var out strings.Builder
    encoder := xml.NewEncoder(&out)
    encoder.Indent("", "  ")
    for {
        tok, err := decoder.Token()
        if err != nil {
            break
        }
        encoder.EncodeToken(tok)
    }
    encoder.Flush()
    return out.String(), nil
}
// formatXML("<a><b>1</b></a>") → "<a>\n  <b>1</b>\n</a>"
CLI (xmllint)
# Format XML file with xmllint (part of libxml2, pre-installed on macOS/Linux)
xmllint --format input.xml > formatted.xml

# Format from stdin
echo '<a><b>1</b></a>' | xmllint --format -
# → <?xml version="1.0"?>
# → <a>
# →   <b>1</b>
# → </a>

# Validate and format at the same time
xmllint --format --schema schema.xsd input.xml

よくある質問

XMLのフォーマットはドキュメントの意味を変えますか?
いいえ。XMLフォーマットはタグ間の意味のない空白を追加または削除するだけです。XML情報セット(infoset)は変わりません。例外として、スキーマが特定の要素にxml:space="preserve"を使用している場合、フォーマッターはその要素をそのままにしておく必要があり、このツールもそれを守ります。
XMLフォーマットとXML検証の違いは何ですか?
フォーマットはXMLを読みやすくするためにインデントと改行を追加します。検証はドキュメントがスキーマ(XSD、DTD、RelaxNG)に準拠しているかを確認します。ドキュメントは整形式でもスキーマに対して無効な場合があります。読みやすさにはこのフォーマッターを、スキーマ準拠にはXMLバリデーターツールを使用してください。
名前空間を含むXMLをフォーマットできますか?
できます。ブラウザのDOMParserはXML名前空間をネイティブに処理します。名前空間プレフィックス、デフォルト名前空間宣言(xmlns)、修飾属性名はすべてフォーマット中に保持されます。フォーマッターは名前空間のバインディングを追加、削除、または変更しません。
ブラウザでフォーマットできるXMLファイルのサイズの上限は?
ブラウザベースのフォーマットはおよそ10MBまでのドキュメントで問題なく動作します。それを超えると、DOMツリーが大量のメモリを消費し、UIが応答しなくなることがあります。非常に大きなファイルには、XMLをストリームとして処理するxmllint --formatなどのCLIツールを使用してください。
フォーマットされたXMLにXML宣言が追加されるのはなぜですか?
一部のフォーマッターはDOMツリーをシリアライズする際に<?xml version="1.0"?>を先頭に追加します。この宣言はエンコーディングがUTF-8の場合、XML 1.0では省略可能です。不要な場合は出力の最初の行を削除してください。この宣言は準拠しているXMLプロセッサーによる解析には影響しません。
XMLフォーマットとXML圧縮は同じですか?
逆の操作です。フォーマットは読みやすさを向上させるために空白を追加します。圧縮(ミニファイ)はファイルサイズを削減するために不要な空白をすべて削除します。どちらの操作もXML infosetに対して可逆的です。XMLを圧縮する必要がある場合は、XMLミニファイアーツールを使用してください。
XMLフォーマットとHTMLフォーマットの違いは何ですか?
XMLは厳格です。すべてのタグを閉じる必要があり、属性値はクォートで囲まれなければならず、ドキュメントには正確に1つのルート要素が必要です。HTML(特にHTML5)は寛容で、省略可能な終了タグ、クォートなしの属性、&lt;br&gt;のような空要素がすべて有効です。XMLフォーマッターは無効なXMLを拒否しますが、HTMLフォーマッターはXMLでは許可されない構文を許容します。