Klistra in Lua till vänster och klicka på "Konvertera" — vi gör om det till XMLKlistra in Lua-kod

Vad det här verktyget gör

Om du någonsin försökt baka ihop XML för hand från en Lua-tabell — för en Nginx-config, en spel-savefil, en Redis-scriptpayload — vet du att det är tjatigt. xml2lua går andra hållet rent, men att producera XML från en Lua-tabell betyder fortfarande att du själv måste gå igenom tabellen och konkatenera strängar. Klistra in Lua här och du får välformad XML tillbaka i ett svep — varje nyckel, varje nästlad subtabell, varje array-element bevarat.

Verktyget vet hur Lua-tabeller faktiskt beter sig. En hash-stil-tabell ({ name = "Ava", age = 30 }) blir ett element med barn namngivna efter strängnycklarna. En array-stil-tabell ({ "a", "b", "c" }) — det Lua-programmerare kallar en "sequence" — blir ett container-element med ett barn per element. Blandade tabeller (både strängnycklar och numeriska index i samma tabell) kommer igenom med hash-delen som namngivna barn och sekvens-delen som indexerade barn under, så inget faller bort i tysthet. Boolska värden (true, false) och tal stannar som sin bokstavliga text; nil-värden skrivs ut som tomma självstängande element istället för att försvinna.

Några Lua-idiom hanteras som man skulle hoppas. local-deklarationer plockas bort, så local order = { ... } använder bara tabellen inuti. Ett avslutande return order i slutet av en modulfil känns igen och den returnerade tabellen blir dokumentets rot. Långa strängar skrivna med [[ ... ]] kommer igenom som textinnehåll med whitespace bevarat. Nycklar som inte är giltiga XML-elementnamn — ["content-type"], [1], ["2024-04"] — skrivs om till ett säkert taggnamn så dokumentet fortfarande parsas. Om du är ny med särdragen kring hur Lua behandlar heltals- kontra strängnycklar, har boken Programming in Lua ett användbart kapitel om det.

Så här använder du det

Tre steg. Funkar likadant oavsett om du klistrar in en enradig tabell eller en hel modulfil.

1

Klistra in din Lua (eller prova exemplet)

Släpp in din Lua-kod i vänstra editorn. En naken tabell-literal, en local t = {...}-tilldelning, eller en hel modul som slutar med return t — allt funkar. Klicka på Ladda exempel om du först vill leka med ett realistiskt Order-exempel.

Du behöver inte plocka bort kommentarer, ta bort require()-anrop eller inlina metatabeller. Klistra bara. Vi läser tabell-literalen och ignorerar resten.

2

Tryck Konvertera

Klicka på den gröna Konvertera-knappen. Verktyget går igenom Lua-tabellen — array-del, hash-del, nästlade subtabeller — och bygger XML:en i ett svep. Du ser en kort laddningsindikator medan det körs.

3

Kopiera XML:en

Högra panelen fylls med indenterad, välformad XML som vilken standardkompatibel parser som helst (inklusive LuaExpat) accepterar. Kopiera in det i din configfil, testfixtur eller dokumentation.

När det faktiskt kommer till användning

Spel-configfiler

Ditt Love2D- eller Defold-projekt sparar leveldata som Lua-tabell, men din leveleditor eller publiceringspipeline vill ha XML. Klistra in Lua, kopiera XML — inget ad-hoc konverteringsscript att underhålla.

Nginx / OpenResty config-payloads

Om du bygger request- eller response-bodies som Lua-tabeller inuti ett <code>ngx.location.capture</code>-anrop och behöver XML-utdata sparar det här dig från att skriva en konkateneringshjälpare. Nästlade tabeller blir nästlade element rent.

Redis Lua-scriptpayloads

Redis-script som returnerar strukturerade tabeller (för loggning, audit trails eller downstream-ingestion) behöver ibland skeppas som XML till legacy-konsumenter. Klistra in tabell-literalen, få XML som går rakt in i pipelinen.

Konvertera mellan xml2lua och andra verktyg

Team som använder <code>xml2lua</code> för XML-till-Lua-riktningen behöver ibland det omvända för tester och fixturer. Det här ger dig en snabb, visuell koll på hur en Lua-tabell bör se ut som XML innan du bestämmer dig för en handskriven serializer.

Vanliga frågor

Hur hanteras array-stil och hash-stil-tabeller olika?

En array-stil-tabell ({ "a", "b", "c" }) blir ett container-element med numrerade barn namngivna efter föräldern (eller en generell <item>-tagg). En hash-stil-tabell ({ name = "Ava" }) blir ett element med namngivna barn. En blandad tabell — både en sekvens-del och strängnycklar — får båda formerna sida vid sida så inget går förlorat.

Och strängnycklar kontra heltalsnycklar?

Strängnycklar blir elementnamn direkt: { orderId = "ORD-4821" }<orderId>ORD-4821</orderId>. Heltalsnycklar som används som sekvens (1, 2, 3, ...) blir positionella barn. Heltalsnycklar med luckor, eller icke-heltaliga numeriska nycklar, skrivs ut med ett index-attribut så mappningen bevaras. Se Lua 5.4 referensmanual för den underliggande semantiken.

Klarar det nästlade tabeller och blandade typer?

Ja — godtycklig nästling, blandade sträng- / heltalsnycklar, tabeller i arrayer, arrayer i tabeller. Nästlade subtabeller kommer igenom som nästlade element med egna barn. Boolska värden skrivs ut som true/false, tal stannar som bokstavlig text, och nil blir ett tomt självstängande element så formen håller sig stabil mellan poster.

Vad händer med nycklar med bindestreck eller reserverade tecken?

Nycklar som ["content-type"] eller ["2024-04"] är lagliga i Lua men olagliga som råa XML-elementnamn. Konverteraren skriver om dem till en säker tagg (till exempel content_type) och bevarar ursprungsnamnet som attribut. Om strikt round-tripping spelar roll, titta igenom utdatan innan du använder den.

Kan jag klistra in en hel modulfil?

Ja. local-deklarationer, require()-rader, hjälpfunktioner och kommentarer ignoreras. Om filen slutar med return t blir den returnerade tabellen dokumentets rot. Om det bara finns en enda tabell-literal på toppnivå används den istället.

Sparas min kod?

Koden skickas till backend för konvertering och sparas inte — vi loggar inte payloaden. Är scriptet känsligt, behandla det som vilket onlineverktyg som helst: rensa hemligheter först, sen klistra.

Andra verktyg du kan behöva

Lua till XML är en pusselbit. De här verktygen passar bra ihop med det: