Lua から XML コンバーター
Lua テーブルを貼り付け、クリーンな XML を取得。
このツールができること
Lua テーブルから XML を手作りしようとしたことがあれば — Nginx の設定、ゲームのセーブファイル、Redis スクリプトのペイロードなど — それが面倒だということは知っているはずです。xml2lua は逆方向をきれいに処理してくれますが、Lua テーブルから XML を生成するとなると、自分でテーブルを歩き回って文字列を連結することになります。Lua をここに貼り付ければ、well-formed な XML が一度に返ってきます — すべてのキー、すべてのネストされたサブテーブル、すべての配列要素が保持されます。
このツールは Lua テーブル の実際の振る舞いを理解しています。ハッシュスタイルのテーブル({ name = "Ava", age = 30 })は、文字列キーにちなんで名前が付けられた子要素を持つ要素になります。配列スタイルのテーブル({ "a", "b", "c" }) — Lua プログラマーが「シーケンス」と呼ぶもの — は要素ごとに 1 つの子要素を持つコンテナ要素になります。混合テーブル(同じテーブル内に文字列キーと数値インデックスの両方)は、ハッシュ部分が名前付き子要素として、シーケンス部分がインデックス付き子要素として下に続いて出てくるので、何も静かに落ちることはありません。真偽値(true、false)と数値はリテラルテキストのまま残ります。nil 値は消えるのではなく空の自己完結要素として出力されます。
いくつかの Lua のイディオムは、期待どおりの処理がされます。local 宣言は取り除かれるので、local order = { ... } は内側のテーブルをそのまま使います。モジュールファイル末尾の return order は認識され、返されたテーブルがドキュメントルートになります。[[ ... ]] で書かれた長い文字列は、空白を保持したままテキストコンテンツとして通過します。有効な XML 要素名ではないキー — ["content-type"]、[1]、["2024-04"] など — はドキュメントがそれでもパースできるように安全なタグ名に書き換えられます。Lua が整数キーと文字列キーをどう扱うかの癖に不慣れなら、Programming in Lua 本に役立つ章があります。
使い方
3 ステップ。1 行のテーブルを貼り付けてもモジュールファイル全体を貼り付けても同じです。
Lua を貼り付ける(またはサンプルを試す)
左のエディタに Lua コードをドロップします。裸のテーブルリテラル、local t = {...} 代入、return t で終わるモジュール全体 — どれでも OK。まず現実的な Order の例で遊びたいなら サンプルを読み込む をクリック。
コメントを取り除いたり、require() 呼び出しを消したり、メタテーブルをインライン化したりする必要はありません。ただ貼り付けてください。テーブルリテラルを読んで残りは無視します。
変換を押す
緑色の 変換 ボタンをクリック。ツールは Lua テーブル — 配列部分、ハッシュ部分、ネストされたサブテーブル — を歩き回り、1 回のパスで XML を構築します。実行中は短い読み込みインジケーターが表示されます。
XML をコピー
右のパネルがインデント済みで well-formed な XML で埋まります。標準準拠のパーサー(LuaExpat を含む)なら受け入れます。設定ファイル、テストフィクスチャ、ドキュメントにコピーしてください。
実際に役立つ場面
ゲーム設定ファイル
あなたの Love2D や Defold プロジェクトがレベルデータを Lua テーブルで保持しているけれど、レベルエディターや配信パイプラインは XML を欲しがる — 貼り付けて XML をコピー。保守する場当たり的な変換スクリプトは要りません。
Nginx / OpenResty 設定ペイロード
<code>ngx.location.capture</code> 呼び出しの中で Lua テーブルとしてリクエストやレスポンスのボディを組み立てていて、XML 出力が必要なとき、連結ヘルパーを書く手間が省けます。ネストされたテーブルはネストされた要素にきれいに変換されます。
Redis の Lua スクリプトペイロード
構造化されたテーブルを返す Redis スクリプト(ロギング、監査証跡、下流への取り込み用)は、レガシーコンシューマーに XML として送る必要があることがあります。テーブルリテラルを貼り付ければ、パイプラインに直接入る XML が出てきます。
xml2lua と他ツールの橋渡し
XML→Lua 方向に <code>xml2lua</code> を使っているチームは、テストやフィクスチャのために逆方向が必要になることがあります。手書きのシリアライザーにコミットする前に、Lua テーブルが XML としてどう見えるべきかを視覚的にさっと確認できます。
よくある質問
配列スタイルとハッシュスタイルのテーブルはどう異なって扱われますか?
配列スタイルのテーブル({ "a", "b", "c" })は、親にちなんで番号付けされた子要素を持つコンテナ要素(または汎用の <item> タグ)になります。ハッシュスタイルのテーブル({ name = "Ava" })は名前付き子要素を持つ要素になります。混合テーブル — シーケンス部分と文字列キーの両方 — は両方の形を並べて出すので、何も失われません。
文字列キーと整数キーはどうなりますか?
文字列キーはそのまま要素名になります: { orderId = "ORD-4821" } → <orderId>ORD-4821</orderId>。シーケンスとして使われる整数キー(1, 2, 3, ...)は位置ベースの子要素になります。飛び飛びの整数キーや整数でない数値キーは、マッピングを保持するため index 属性付きで出力されます。基礎となるセマンティクスは Lua 5.4 リファレンスマニュアル を参照。
ネストされたテーブルや混合型は扱えますか?
はい — 任意のネスト、混合された文字列/整数キー、配列の中のテーブル、テーブルの中の配列。ネストされたサブテーブルは独自の子を持つネスト要素として通過します。真偽値は true/false として印字され、数値はリテラルテキストのまま、nil は空の自己完結要素になるので、レコード間で形が安定します。
ハイフンや予約文字を含むキーはどうなりますか?
["content-type"] や ["2024-04"] のようなキーは Lua では合法ですが、生の XML 要素名としては違法です。コンバーターはそれらを安全なタグ(たとえば content_type)に書き換え、元の名前を属性として保持します。厳密なラウンドトリップが重要なら、使う前に出力を確認してください。
モジュールファイル全体を貼り付けてもいいですか?
はい。local 宣言、require() 行、ヘルパー関数、コメントは無視されます。ファイルが return t で終わる場合、返されたテーブルがドキュメントルートになります。トップレベルに単一のテーブルリテラルしかない場合は、代わりにそれが使われます。
コードは保存されますか?
コードは変換のためにバックエンドへ送られ、永続化はされません — ペイロードのログも取りません。スクリプトがセンシティブなら、どんなオンラインツールと同じように扱ってください: シークレットを落としてから貼り付けましょう。
必要かもしれない他のツール
Lua から XML はパズルの 1 ピースです。これらのツールと相性がいいです: