XML フォーマッタ & バリデータ
XML を貼り付けて、適切なインデントでフォーマット、または構文を検証。属性と名前空間を処理。アップロードなし。
- 左側のテキストエリアに XML を貼り付けます。
- フォーマットをクリックすると、fast-xml-parser を通じてラウンドトリップしインデントされた XML を生成します。
- 検証をクリックすると、入力を変更せずに well-formedness を確認します。
- エラーはドキュメント内の問題のある位置を指します。
何ができるのか?
fast-xml-parser で XML をパースし、一貫したインデントで再出力します。各要素内の属性順は保持され、要素のネストは正確に保持されます。混合コンテンツ(テキスト + 子要素)と名前空間(prefix:tag)はそのまま維持されます。出力は well-formed な XML です — ただし well-formed と valid は同じではありません(妥当性にはスキーマや DTD が必要で、本ツールは確認しません)。
例
乱雑な XML 入力:
<root version="1"><name>Ada</name><tags>math</tags><tags>logic</tags></root> フォーマットされた出力:
<root version="1">
<name>Ada</name>
<tags>math</tags>
<tags>logic</tags>
</root> よくある XML エラーと修正方法
XML の well-formedness ルールは HTML より厳格です。以下のパターンが多くのパーサ失敗をカバーします。
- 閉じられていないタグ。 `<a><b></a>` は無効です — `<b>` はどこかで閉じる必要があります(`<b/>` または `</b>`)。XML は HTML スタイルのオプショナルな閉じタグを許可しません。
- 大文字小文字の不一致。 XML は大文字小文字を区別します — `<Foo></foo>` は 2 つの異なるタグ名です。正確に一致させてください。
- エスケープされていない特殊文字。 テキストや属性値内のリテラルな `<`、`>`、`&`、または引用符はエスケープが必要です: `<`、`>`、`&`、`"`。これらの文字を含むデータは CDATA で包んでください: `<![CDATA[...]]>`。
- 複数のルート。 XML は厳密に 1 つのルート要素を必要とします。トップレベルでの `<a/><b/>` は無効です — 包んでください: `<root><a/><b/></root>`。
- 無効な要素名。 要素名は数字で始められず、スペースを含められず、予約文字(`< > & " \'`)を使えません。`xml` (どの大文字小文字でも)で始まる名前は仕様で予約されています。
- 属性周りの引用符の不一致。 `<a name="value\'>` は二重引用符と一重引用符を混在させます。属性ごとに 1 つのスタイルを一貫して選んでください。どちらも有効な XML です。
よくある質問
フォーマットはデータを変更しますか?
要素間の空白のみが変わります。要素順、属性順、属性値、テキストコンテンツ、CDATA フレーミングは保持されます。自己終了形式(`<x/>`)と明示形式(`<x></x>`)は正規化される可能性があります。
XML コメントは保持されますか?
fast-xml-parser はデフォルトでコメントを破棄します。コメント保持のフォーマットが必要なら、別のツール(例えば XSLT 恒等変換、または `xmllint --format`)を使ってください。
スキーマに対して検証しますか?
いいえ。これは well-formedness のみを確認します — 文書が構文的に有効な XML としてパースされること。スキーマ検証(XSD、DTD、RelaxNG)は別ステップで、追加入力としてスキーマが必要です。
名前空間はどう扱われますか?
名前空間プレフィックスは要素名の一部(`x:foo`)として保持されます。デフォルト名前空間宣言とプレフィックスバインディングは属性として保持されます。名前空間認識処理(URI 解決)は実行されません。
私の XML はアップロードされますか?
いいえ。すべてはあなたのブラウザで実行されます — 入力はこのページの JavaScript で解析・再シリアライズされ、サーバーに送信されることはありません。
インデントをカスタマイズできますか?
現在レベルあたり 2 スペースに固定。カスタマイズするには、コマンドラインで fast-xml-parser を実行し — 同じライブラリ — `{ indentBy: " " }` または他の文字列を渡してください。