Convertidor de Lua a XML
Pega tablas de Lua. Recibe XML limpio.
Qué hace esta herramienta
Si alguna vez has intentado montar XML a mano a partir de una tabla de Lua — para un config de Nginx, un archivo de guardado de un juego, un payload de un script de Redis — sabes que es un plomo. xml2lua hace el camino inverso sin problema, pero producir XML desde una tabla de Lua sigue implicando recorrer la tabla tú mismo y concatenar strings. Pega el Lua aquí y te devolvemos XML bien formado de una pasada — cada clave, cada subtabla anidada, cada elemento del array preservado.
La herramienta sabe cómo se comportan realmente las tablas de Lua. Una tabla estilo hash ({ name = "Ava", age = 30 }) se vuelve un elemento con hijos nombrados según las claves string. Una tabla estilo array ({ "a", "b", "c" }) — lo que los programadores de Lua llaman una "secuencia" — se vuelve un elemento contenedor con un hijo por cada elemento. Las tablas mixtas (claves string e índices numéricos en la misma tabla) salen con la parte hash como hijos nombrados y la parte secuencia como hijos indexados debajo, así no se pierde nada en silencio. Los booleanos (true, false) y los números se mantienen como su texto literal; los valores nil se emiten como elementos vacíos autocerrados en lugar de desaparecer.
Algunos modismos de Lua se manejan como uno esperaría. Las declaraciones local se eliminan, así que local order = { ... } simplemente usa la tabla interior. Un return order al final de un archivo de módulo se reconoce y la tabla devuelta se vuelve la raíz del documento. Las cadenas largas escritas con [[ ... ]] pasan como contenido de texto preservando los espacios en blanco. Las claves que no son nombres de elemento XML válidos — ["content-type"], [1], ["2024-04"] — se reescriben a un nombre de tag seguro para que el documento siga parseando bien. Si eres nuevo en las particularidades de cómo Lua trata las claves enteras vs string, el libro Programming in Lua tiene un capítulo útil sobre esto.
Cómo usarlo
Tres pasos. Funciona igual si pegas una tabla de una línea o un archivo de módulo completo.
Pega tu Lua (o prueba el ejemplo)
Suelta tu código Lua en el editor de la izquierda. Un literal de tabla pelado, una asignación local t = {...}, o un módulo entero que termina en return t — todo vale. Pulsa Cargar ejemplo si quieres un ejemplo realista de Order para trastear primero.
No necesitas quitar los comentarios, eliminar las llamadas a require() ni las metatablas. Simplemente pégalo. Leemos el literal de tabla e ignoramos el resto.
Pulsa Convertir
Dale al botón verde Convertir. La herramienta recorre la tabla de Lua — parte array, parte hash, subtablas anidadas — y construye el XML de una pasada. Verás un indicador de carga corto mientras corre.
Copia el XML
El panel derecho se llena con XML indentado y bien formado que cualquier parser que cumpla el estándar (incluido LuaExpat) va a aceptar. Cópialo a tu archivo de config, a tu fixture de test o a la documentación.
Cuándo viene realmente bien
Configs de juegos
Tu proyecto de Love2D o Defold guarda los datos de nivel como una tabla de Lua, pero el editor de niveles o el pipeline de publicación quieren XML. Pega el Lua, copia el XML — sin mantener un script conversor ad-hoc.
Payloads de config de Nginx / OpenResty
Si montas bodies de petición o respuesta como tablas de Lua dentro de un <code>ngx.location.capture</code> y necesitas salida XML, te ahorras escribir un helper de concatenación. Las tablas anidadas se vuelven elementos anidados limpiamente.
Payloads de scripts Lua en Redis
Los scripts de Redis que devuelven tablas estructuradas (para logging, auditoría o ingesta aguas abajo) a veces necesitan ir como XML a consumidores legacy. Pega el literal de tabla, recibe XML que entra directo al pipeline.
Convertir entre xml2lua y otras herramientas
Los equipos que usan <code>xml2lua</code> para la dirección XML-a-Lua a veces necesitan el inverso para tests y fixtures. Esto te da una comprobación visual rápida de cómo debería verse una tabla de Lua como XML antes de comprometerte con un serializador hecho a mano.
Preguntas frecuentes
¿Cómo se tratan las tablas estilo array frente a las estilo hash?
Una tabla estilo array ({ "a", "b", "c" }) se vuelve un elemento contenedor con hijos numerados nombrados según el padre (o un tag genérico <item>). Una tabla estilo hash ({ name = "Ava" }) se vuelve un elemento con hijos nombrados. Una tabla mixta — con parte secuencia y claves string — recibe ambas formas una al lado de la otra para que no se pierda nada.
¿Y las claves string frente a las enteras?
Las claves string se vuelven nombres de elemento directamente: { orderId = "ORD-4821" } → <orderId>ORD-4821</orderId>. Las claves enteras usadas como secuencia (1, 2, 3, ...) se vuelven hijos posicionales. Las claves enteras con huecos, o claves numéricas no enteras, salen con un atributo index para preservar el mapeo. Echa un ojo al manual de referencia de Lua 5.4 para la semántica subyacente.
¿Funciona con tablas anidadas y tipos mixtos?
Sí — anidamiento arbitrario, claves mezcladas string / enteras, tablas dentro de arrays, arrays dentro de tablas. Las subtablas anidadas salen como elementos anidados con sus propios hijos. Los booleanos se imprimen como true/false, los números quedan como su texto literal y nil se vuelve un elemento vacío autocerrado para que la forma se mantenga estable entre registros.
¿Qué pasa con claves con guiones o caracteres reservados?
Claves como ["content-type"] o ["2024-04"] son legales en Lua pero ilegales como nombres de elemento XML en crudo. El conversor las reescribe a un tag seguro (por ejemplo content_type) y preserva el nombre original como atributo. Si te importa el round-trip estricto, revisa la salida antes de usarla.
¿Puedo pegar un archivo de módulo entero?
Sí. Las declaraciones local, las líneas require(), las funciones auxiliares y los comentarios se ignoran. Si el archivo termina en return t, la tabla devuelta se vuelve la raíz del documento. Si solo hay un literal de tabla de nivel superior, ese se usa en su lugar.
¿Guardáis mi código?
El código se envía al backend para la conversión y no lo persistimos — no logueamos el payload. Si el script tiene información sensible, trátalo como harías con cualquier herramienta online: quita los secretos primero y luego pega.
Otras herramientas que te pueden venir bien
Lua a XML es una pieza del rompecabezas. Estas herramientas combinan bien con ella: