Lua til XML-konverter
Indsæt Lua-tabeller. Få ren XML tilbage.
Hvad værktøjet gør
Har du nogensinde prøvet at strikke XML sammen i hånden ud fra en Lua-tabel — til en Nginx-config, en savefil fra et spil, en Redis-script-payload — så ved du, det er en plage. xml2lua klarer den anden vej pænt, men at producere XML fra en Lua-tabel betyder stadig, at du selv skal gå igennem tabellen og sammensætte strenge. Indsæt Lua-koden her og få velformet XML tilbage i én omgang — hver nøgle, hver nestede undertabel, hvert array-element bevaret.
Værktøjet ved, hvordan Lua-tabeller faktisk opfører sig. En hash-stil-tabel ({ name = "Ava", age = 30 }) bliver et element med børn navngivet efter strengnøglerne. En array-stil-tabel ({ "a", "b", "c" }) — det Lua-programmører kalder en "sequence" — bliver et container-element med ét barn per element. Blandede tabeller (både strengnøgler og numeriske indeks i samme tabel) kommer igennem med hash-delen som navngivne børn og sekvens-delen som indekserede børn under, så intet forsvinder i stilhed. Booleans (true, false) og tal bliver som deres bogstavelige tekst; nil-værdier udskrives som tomme selvlukkende elementer i stedet for at forsvinde.
Et par Lua-idiomer håndteres, som man kunne håbe. local-deklarationer fjernes, så local order = { ... } bare bruger tabellen indeni. Et afsluttende return order i enden af en modulfil genkendes, og den returnerede tabel bliver dokumentets rod. Lange strenge skrevet med [[ ... ]] kommer igennem som tekstindhold med whitespace bevaret. Nøgler, der ikke er gyldige XML-elementnavne — ["content-type"], [1], ["2024-04"] — omskrives til et sikkert tagnavn, så dokumentet stadig kan parses. Er du ny med særhederne omkring, hvordan Lua behandler heltals- kontra strengnøgler, har bogen Programming in Lua et nyttigt kapitel om det.
Sådan bruger du det
Tre trin. Virker ens, uanset om du indsætter en enlinjes tabel eller en hel modulfil.
Indsæt din Lua (eller prøv eksemplet)
Drop din Lua-kode i venstre editor. En nøgen tabel-literal, en local t = {...}-tildeling eller et helt modul, der slutter med return t — alt går. Klik på Indlæs eksempel, hvis du vil lege med et realistisk Order-eksempel først.
Du behøver ikke fjerne kommentarer, smide require()-kald ud eller inline metatables. Bare indsæt. Vi læser tabel-literalen og ignorerer resten.
Tryk Konverter
Klik på den grønne Konverter-knap. Værktøjet går igennem Lua-tabellen — array-del, hash-del, nestede undertabeller — og bygger XML'en i én omgang. Du ser en kort indlæsningsindikator, mens det kører.
Kopier XML'en
Højre panel fyldes med indrykket, velformet XML, som enhver standardkonform parser (inklusive LuaExpat) accepterer. Kopier det ind i din configfil, testfixtur eller dokumentation.
Hvornår det virkelig kommer til gavn
Spil-configfiler
Dit Love2D- eller Defold-projekt gemmer leveldata som Lua-tabel, men din leveleditor eller udgivelses-pipeline vil have XML. Indsæt Lua, kopier XML — ingen ad-hoc konverteringsscript at vedligeholde.
Nginx / OpenResty config-payloads
Hvis du bygger request- eller response-bodies som Lua-tabeller inde i et <code>ngx.location.capture</code>-kald og behøver XML-output, sparer det her dig for at skrive en sammensætningshjælper. Nestede tabeller bliver til nestede elementer pænt.
Redis Lua-script-payloads
Redis-scripts, der returnerer strukturerede tabeller (til logging, revisionsspor eller downstream-ingest) skal nogle gange sendes som XML til legacy-forbrugere. Indsæt tabel-literalen, få XML, der falder direkte ind i pipelinen.
Konvertering mellem xml2lua og andre værktøjer
Teams, der bruger <code>xml2lua</code> til XML-til-Lua-retningen, har nogle gange brug for det omvendte til tests og fixturer. Det her giver dig et hurtigt, visuelt tjek på, hvordan en Lua-tabel bør se ud som XML, før du binder dig til en håndskrevet serializer.
Almindelige spørgsmål
Hvordan håndteres array-stil og hash-stil-tabeller forskelligt?
En array-stil-tabel ({ "a", "b", "c" }) bliver et container-element med nummererede børn navngivet efter forælderen (eller et generisk <item>-tag). En hash-stil-tabel ({ name = "Ava" }) bliver et element med navngivne børn. En blandet tabel — både en sekvens-del og strengnøgler — får begge former side om side, så intet går tabt.
Og hvad med strengnøgler kontra heltalsnøgler?
Strengnøgler bliver elementnavne direkte: { orderId = "ORD-4821" } → <orderId>ORD-4821</orderId>. Heltalsnøgler brugt som sekvens (1, 2, 3, ...) bliver positionelle børn. Heltalsnøgler med huller eller ikke-heltals numeriske nøgler udskrives med et index-attribut, så mappingen bevares. Se Lua 5.4 referencemanualen for den underliggende semantik.
Håndterer det nestede tabeller og blandede typer?
Ja — vilkårlig nesting, blandede streng- / heltalsnøgler, tabeller i arrays, arrays i tabeller. Nestede undertabeller kommer igennem som nestede elementer med egne børn. Booleans skrives som true/false, tal bliver som bogstavelig tekst, og nil bliver et tomt selvlukkende element, så formen forbliver stabil på tværs af poster.
Hvad sker der med nøgler med bindestreger eller reserverede tegn?
Nøgler som ["content-type"] eller ["2024-04"] er lovlige i Lua, men ulovlige som rå XML-elementnavne. Konverteren omskriver dem til et sikkert tag (for eksempel content_type) og bevarer det oprindelige navn som attribut. Hvis streng round-tripping betyder noget, så kig outputtet igennem før brug.
Kan jeg indsætte en hel modulfil?
Ja. local-deklarationer, require()-linjer, hjælpefunktioner og kommentarer ignoreres. Slutter filen med return t, bliver den returnerede tabel dokumentets rod. Er der kun én enkelt tabel-literal på topniveau, bruges den i stedet.
Bliver min kode gemt?
Koden sendes til backend for konvertering og bliver ikke persisteret — vi logger ikke payloaden. Er scriptet følsomt, behandl det som ethvert online-værktøj: rens secrets først, indsæt så.
Andre værktøjer du måske har brug for
Lua til XML er én brik af puslespillet. Disse værktøjer passer godt sammen med det: