Collez du Lua à gauche et cliquez sur "Convertir" — on le transforme en XMLCollez du code Lua

Ce que fait cet outil

Si vous avez déjà essayé de bricoler du XML à la main depuis une table Lua — pour un config Nginx, un fichier de sauvegarde de jeu, un payload de script Redis — vous savez que c'est fastidieux. xml2lua fait l'autre sens proprement, mais produire du XML depuis une table Lua, ça reste parcourir la table soi-même et concaténer des strings. Collez le Lua ici et vous récupérez du XML bien formé en une passe — chaque clé, chaque sous-table imbriquée, chaque élément de tableau préservé.

L'outil sait comment se comportent vraiment les tables Lua. Une table style hash ({ name = "Ava", age = 30 }) devient un élément avec des enfants nommés d'après les clés string. Une table style tableau ({ "a", "b", "c" }) — ce que les programmeurs Lua appellent une "séquence" — devient un élément conteneur avec un enfant par entrée. Les tables mixtes (clés string et indices numériques dans la même table) passent avec la partie hash en enfants nommés et la partie séquence en enfants indexés en dessous, donc rien n'est perdu en silence. Les booléens (true, false) et les nombres gardent leur texte littéral ; les valeurs nil sortent sous forme d'éléments vides auto-fermants au lieu de disparaître.

Quelques idiomes Lua sont gérés comme on pourrait l'espérer. Les déclarations local sont retirées, donc local order = { ... } utilise simplement la table à l'intérieur. Un return order en fin de fichier de module est reconnu et la table retournée devient la racine du document. Les longues chaînes écrites avec [[ ... ]] passent comme contenu texte avec les espaces préservés. Les clés qui ne sont pas des noms d'élément XML valides — ["content-type"], [1], ["2024-04"] — sont réécrites vers un nom de tag sûr pour que le document se parse quand même. Si vous découvrez les subtilités de la façon dont Lua traite les clés entières vs string, le livre Programming in Lua a un chapitre utile dessus.

Comment l'utiliser

Trois étapes. Fonctionne pareil que vous colliez une table d'une ligne ou un fichier de module complet.

1

Collez votre Lua (ou essayez l'exemple)

Déposez votre code Lua dans l'éditeur de gauche. Un littéral de table nu, une affectation local t = {...}, ou un module entier finissant par return t — tout passe. Cliquez sur Charger l'exemple si vous voulez un exemple Order réaliste pour jouer d'abord.

Pas besoin de retirer les commentaires, d'enlever les appels require(), ni d'inliner les metatables. Collez juste. On lit le littéral de table et on ignore le reste.

2

Cliquez sur Convertir

Appuyez sur le bouton vert Convertir. L'outil parcourt la table Lua — partie tableau, partie hash, sous-tables imbriquées — et construit le XML en une passe. Vous verrez un court indicateur de chargement pendant l'exécution.

3

Copiez le XML

Le panneau de droite se remplit de XML indenté et bien formé que n'importe quel parseur conforme au standard (y compris LuaExpat) acceptera. Copiez-le dans votre fichier de config, votre fixture de test ou votre doc.

Quand ça sert vraiment

Fichiers de config de jeu

Votre projet Love2D ou Defold garde les données de niveau comme une table Lua, mais votre éditeur de niveaux ou votre pipeline de publication veut du XML. Collez le Lua, copiez le XML — pas de script convertisseur ad-hoc à maintenir.

Payloads de config Nginx / OpenResty

Si vous construisez des corps de requête ou de réponse en tables Lua dans un <code>ngx.location.capture</code> et que vous avez besoin de sortie XML, ça vous évite d'écrire un helper de concaténation. Les tables imbriquées deviennent des éléments imbriqués proprement.

Payloads de scripts Lua Redis

Les scripts Redis qui renvoient des tables structurées (pour le logging, l'audit, ou l'ingestion en aval) doivent parfois partir en XML vers des consommateurs legacy. Collez le littéral de table, obtenez du XML qui s'intègre direct au pipeline.

Convertir entre xml2lua et d'autres outils

Les équipes qui utilisent <code>xml2lua</code> dans le sens XML-vers-Lua ont parfois besoin de l'inverse pour les tests et fixtures. Ça vous donne une vérif visuelle rapide de ce à quoi une table Lua devrait ressembler en XML avant de vous engager sur un sérialiseur fait main.

Questions fréquentes

Comment les tables style tableau et style hash sont-elles traitées différemment ?

Une table style tableau ({ "a", "b", "c" }) devient un élément conteneur avec des enfants numérotés nommés d'après le parent (ou un tag générique <item>). Une table style hash ({ name = "Ava" }) devient un élément avec des enfants nommés. Une table mixte — partie séquence et clés string — reçoit les deux formes côte à côte pour que rien ne soit perdu.

Et pour les clés string vs clés entières ?

Les clés string deviennent des noms d'élément directement : { orderId = "ORD-4821" }<orderId>ORD-4821</orderId>. Les clés entières utilisées en séquence (1, 2, 3, ...) deviennent des enfants positionnels. Les clés entières avec des trous, ou les clés numériques non entières, sortent avec un attribut index pour préserver le mapping. Voir le manuel de référence Lua 5.4 pour la sémantique sous-jacente.

Ça gère les tables imbriquées et les types mixtes ?

Oui — imbrication arbitraire, clés string / entières mélangées, tables dans les tableaux, tableaux dans les tables. Les sous-tables imbriquées passent en éléments imbriqués avec leurs propres enfants. Les booléens s'impriment en true/false, les nombres gardent leur texte littéral, et nil devient un élément vide auto-fermant pour que la forme reste stable entre les enregistrements.

Que deviennent les clés avec tirets ou caractères réservés ?

Des clés comme ["content-type"] ou ["2024-04"] sont légales en Lua mais illégales comme noms d'élément XML bruts. Le convertisseur les réécrit vers un tag sûr (par exemple content_type) et préserve le nom original comme attribut. Si le round-trip strict est critique, relisez la sortie avant de l'utiliser.

Je peux coller un fichier de module entier ?

Oui. Les déclarations local, les lignes require(), les fonctions helpers et les commentaires sont ignorés. Si le fichier finit par return t, la table retournée devient la racine du document. S'il y a juste un seul littéral de table au niveau supérieur, c'est celui-là qui est utilisé.

Mon code est-il stocké ?

Le code est envoyé au backend pour la conversion et n'est pas persisté — on ne log pas le payload. Si le script est sensible, traitez-le comme n'importe quel outil en ligne : virez les secrets avant de coller.

Autres outils qui peuvent servir

Lua vers XML est une pièce du puzzle. Ces outils marchent bien avec :