JSON を XML に変換:ルート要素・属性・配列

XML は単一のルートを必要とし、リストは繰り返し要素で表現します。@ 接頭辞キーを属性に、#text を要素テキストにマッピングすれば、可逆変換が得られます。

ルート要素を選ぶ

XML には必ず 1 つだけのルートが必要です。JSON にトップレベルのキーが 1 つだけあるなら、それをルート要素にしてください。複数あれば、すべてを合成のルート要素で包みます。

属性とテキスト

@ プレフィックス付きのキーは属性に、#text キーは要素のテキスト内容になります。これは XML ↔ JSON の標準的な約束に従っていて、変換のラウンドトリップが成立します。

配列は繰り返し要素になる

JSON の配列は 1 つの要素にはなりません —— 各要素が同じタグ名の独立した要素に展開されます。XML は繰り返しでリストを表すからです。

エスケープ

本文では &、<、> をエスケープし(属性内のダブルクォートも)、先頭に XML 宣言を付けて、出力が完全な文書になるようにしてください。

名前空間とプレフィックス

XML の名前空間は xmlns または xmlns:prefix 属性として現れ、要素名や属性名を限定します。JSON フレンドリーな形式では、それらを通常の @xmlns / @xmlns:prefix 属性キーとして扱い、soap:Envelope のようなプレフィックス付き名をキーのまま保持してください —— 多くのコンバータはプレフィックスをそのまま残します。

自己閉じタグと明示的な空要素

空の JSON 値は、自己閉じタグ(<note/>)と、空の対タグ(<note></note>)のどちらにもなり得ます。XML 上は等価ですが、下流のパーサはどちらかをうまく扱えないことがあります —— コンパクトな出力には自己閉じを、消費側が厳格と分かっているときは対のタグを使ってください。

ラウンドトリップの注意

XML の一部の事実は JSON に対応物がありません:属性順序、コメント、処理命令、空要素と欠落要素の違いなどです。JSON に変換して編集し、また戻す場合、これらは失われると想定してください —— 署名の正規化が重要な場面で、ラウンドトリップ後の XML を使ってはいけません。

XML のフォーマット・整形・検証

同じコンバータは XML フォーマッタ・XML 整形ツール・XML バリデータとしても使えます。任意の XML を貼り付けて To JSON を押せば整形式かどうか検証され、To XML を押せば一貫したインデントで再出力されます。エディタに XML ビューアや整形プラグインがないときに、ローカルツールを入れずに XML を整形する最短の方法です。