Conversor Lua para XML
Cole tabelas Lua. Receba XML limpo.
O que esta ferramenta faz
Se você já tentou montar XML na mão a partir de uma tabela Lua — para um config do Nginx, um save de jogo, um payload de script Redis — sabe que é chato. O xml2lua faz o caminho contrário limpinho, mas produzir XML a partir de uma tabela Lua ainda significa percorrer a tabela você mesmo e concatenar strings. Cole o Lua aqui e recebe XML bem-formado numa única passada — cada chave, cada subtabela aninhada, cada item do array preservado.
A ferramenta sabe como as tabelas Lua realmente se comportam. Uma tabela estilo hash ({ name = "Ava", age = 30 }) vira um elemento com filhos nomeados segundo as chaves string. Uma tabela estilo array ({ "a", "b", "c" }) — o que os programadores Lua chamam de "sequência" — vira um elemento container com um filho por item. Tabelas mistas (chaves string e índices numéricos na mesma tabela) saem com a parte hash como filhos nomeados e a parte sequência como filhos indexados por baixo, então nada é perdido em silêncio. Booleanos (true, false) e números ficam como texto literal; valores nil são emitidos como elementos vazios self-closing em vez de sumir.
Algumas expressões idiomáticas de Lua são tratadas como se esperaria. Declarações local são removidas, então local order = { ... } usa só a tabela de dentro. Um return order no fim de um arquivo de módulo é reconhecido e a tabela retornada vira a raiz do documento. Strings longas escritas com [[ ... ]] passam como conteúdo textual com os espaços preservados. Chaves que não são nomes de elemento XML válidos — ["content-type"], [1], ["2024-04"] — são reescritas para um nome de tag seguro para que o documento ainda parseie. Se você é novo nas peculiaridades de como Lua trata chaves inteiras vs string, o livro Programming in Lua tem um capítulo útil sobre isso.
Como usar
Três passos. Funciona igual se você cola uma tabela de uma linha ou um arquivo de módulo completo.
Cole seu Lua (ou experimente o exemplo)
Solte seu código Lua no editor da esquerda. Um literal de tabela pelado, uma atribuição local t = {...}, ou um módulo inteiro terminando em return t — tudo serve. Clique em Carregar exemplo se quiser um Order realista para brincar primeiro.
Você não precisa tirar comentários, remover chamadas require() ou inlinear metatables. Só cole. Lemos o literal de tabela e ignoramos o resto.
Aperte Converter
Clique no botão verde Converter. A ferramenta percorre a tabela Lua — parte array, parte hash, subtabelas aninhadas — e constrói o XML numa passada. Você verá um indicador de carregamento curto durante a execução.
Copie o XML
O painel da direita enche com XML indentado e bem-formado que qualquer parser que siga o padrão (incluindo LuaExpat) aceita. Copie para seu arquivo de config, fixture de teste ou documentação.
Quando isso realmente ajuda
Arquivos de config de jogo
Seu projeto Love2D ou Defold guarda dados de nível como tabela Lua, mas o editor de níveis ou o pipeline de publicação quer XML. Cole o Lua, copie o XML — sem script conversor ad-hoc para manter.
Payloads de config Nginx / OpenResty
Se você monta corpos de requisição ou resposta como tabelas Lua dentro de um <code>ngx.location.capture</code> e precisa de saída XML, isso te poupa escrever um helper de concatenação. Tabelas aninhadas viram elementos aninhados limpinho.
Payloads de scripts Lua no Redis
Scripts Redis que retornam tabelas estruturadas (para logging, trilhas de auditoria ou ingestão a jusante) às vezes precisam ser enviados como XML para consumidores legados. Cole o literal de tabela, receba XML que cai direto no pipeline.
Convertendo entre xml2lua e outras ferramentas
Times que usam <code>xml2lua</code> no sentido XML-para-Lua às vezes precisam do inverso para testes e fixtures. Isso te dá uma conferida visual rápida de como uma tabela Lua deveria ficar como XML antes de se comprometer com um serializador feito à mão.
Perguntas frequentes
Como tabelas estilo array e estilo hash são tratadas de forma diferente?
Uma tabela estilo array ({ "a", "b", "c" }) vira um elemento container com filhos numerados nomeados segundo o pai (ou uma tag genérica <item>). Uma tabela estilo hash ({ name = "Ava" }) vira um elemento com filhos nomeados. Uma tabela mista — com parte sequência e chaves string — recebe as duas formas lado a lado para que nada se perca.
E chaves string versus chaves inteiras?
Chaves string viram nomes de elemento diretamente: { orderId = "ORD-4821" } → <orderId>ORD-4821</orderId>. Chaves inteiras usadas como sequência (1, 2, 3, ...) viram filhos posicionais. Chaves inteiras com buracos, ou chaves numéricas não inteiras, saem com um atributo index para preservar o mapeamento. Veja o manual de referência do Lua 5.4 para a semântica de base.
Lida com tabelas aninhadas e tipos mistos?
Sim — aninhamento arbitrário, chaves string / inteiras misturadas, tabelas dentro de arrays, arrays dentro de tabelas. Subtabelas aninhadas passam como elementos aninhados com seus próprios filhos. Booleanos imprimem como true/false, números ficam como texto literal e nil vira um elemento vazio self-closing para que a forma se mantenha estável entre os registros.
O que acontece com chaves com hífen ou caracteres reservados?
Chaves como ["content-type"] ou ["2024-04"] são legais em Lua mas ilegais como nomes de elemento XML brutos. O conversor reescreve para uma tag segura (por exemplo content_type) e preserva o nome original como atributo. Se round-trip estrito importa, revise a saída antes de usar.
Posso colar um arquivo de módulo inteiro?
Sim. Declarações local, linhas require(), funções auxiliares e comentários são ignorados. Se o arquivo termina em return t, a tabela retornada vira a raiz do documento. Se há só um único literal de tabela de nível superior, ele é usado no lugar.
Meu código é armazenado?
O código é enviado ao backend para a conversão e não é persistido — não logamos o payload. Se o script é sensível, trate como trataria qualquer ferramenta online: limpe os segredos antes de colar.
Outras ferramentas que podem ser úteis
Lua para XML é uma peça do quebra-cabeça. Estas ferramentas combinam bem: