Lua'yu sola yapıştır ve "Dönüştür" düğmesine tıkla — XML'e çeviririzLua kodu yapıştır

Bu araç ne işe yarar

Daha önce bir Lua tablosundan elle XML çıkarmaya çalıştıysan — bir Nginx config, bir oyun save dosyası, bir Redis script payload'u — bunun ne kadar sıkıcı olduğunu bilirsin. xml2lua diğer yönü temizce yapar, ama bir Lua tablosundan XML üretmek hâlâ tabloyu kendin dolaşıp string birleştirmek anlamına gelir. Lua'yu buraya yapıştır, tek geçişte well-formed XML alırsın — her anahtar, her iç içe alt tablo, her dizi elemanı korunur.

Araç, Lua tablolarının gerçekte nasıl davrandığını bilir. Hash tarzı bir tablo ({ name = "Ava", age = 30 }) string anahtarlara göre adlandırılmış çocuk öğeleri olan bir öğeye dönüşür. Array tarzı bir tablo ({ "a", "b", "c" }) — Lua programcılarının "sequence" dediği şey — her eleman için bir çocuğu olan bir kapsayıcı öğeye dönüşür. Karışık tablolar (aynı tabloda hem string anahtar hem sayısal index) hash kısmı adlandırılmış çocuklar, sequence kısmı altta index'li çocuklar olarak gelir, böylece sessizce hiçbir şey düşmez. Booleanlar (true, false) ve sayılar literal metin olarak kalır; nil değerleri yok olmak yerine boş self-closing öğeler olarak yayılır.

Birkaç Lua deyimi, bir insanın umacağı şekilde ele alınır. local bildirimleri çıkarılır, yani local order = { ... } yalnızca içerideki tabloyu kullanır. Modül dosyasının sonundaki return order tanınır ve döndürülen tablo belge kökü olur. [[ ... ]] ile yazılmış uzun stringler, boşluklar korunmuş şekilde metin içeriği olarak geçer. Geçerli XML öğe adı olmayan anahtarlar — ["content-type"], [1], ["2024-04"] — belge yine de parse edilebilsin diye güvenli bir tag adına yeniden yazılır. Lua'nun integer ve string anahtarları nasıl farklı işlediğinin tuhaflıklarına yabancıysan, Programming in Lua kitabında bu konuda işe yarar bir bölüm var.

Nasıl kullanılır

Üç adım. Tek satırlık bir tablo mu yapıştırıyorsun yoksa tam bir modül dosyası mı — aynı şekilde çalışır.

1

Lua'nı yapıştır (ya da örneği dene)

Lua kodunu soldaki editöre bırak. Çıplak bir tablo literal'i, local t = {...} ataması veya return t ile biten bir modül — hepsi uyar. Önce gerçekçi bir Order örneğiyle oynamak istersen Örneği yükle'ye tıkla.

Yorumları çıkarman, require() çağrılarını silmen veya metatable'ları inline etmene gerek yok. Sadece yapıştır. Tablo literal'ini okur, gerisini yok sayarız.

2

Dönüştür'e bas

Yeşil Dönüştür düğmesine tıkla. Araç Lua tablosunu dolaşır — array kısmı, hash kısmı, iç içe alt tablolar — ve XML'i tek geçişte inşa eder. Çalışırken kısa bir yükleniyor göstergesi görürsün.

3

XML'i kopyala

Sağdaki panel, standart uyumlu her parser'ın (LuaExpat dahil) kabul edeceği girintili, well-formed XML ile dolar. Config dosyana, test fixture'ına veya dokümanına kopyala.

Gerçekten işe yaradığı yerler

Oyun config dosyaları

Love2D veya Defold projen seviye verilerini Lua tablosu olarak tutuyor ama seviye editörün ya da yayın pipeline'ın XML istiyor. Lua'yu yapıştır, XML'i kopyala — bakımını yapacak özel bir dönüştürücü script olmadan.

Nginx / OpenResty config payload'ları

<code>ngx.location.capture</code> içinde Lua tabloları olarak istek veya yanıt body'leri kuruyorsan ve XML çıktısı gerekiyorsa, bir concat helper yazmaktan seni kurtarır. İç içe tablolar temizce iç içe öğelere dönüşür.

Redis Lua script payload'ları

Yapılandırılmış tablolar döndüren Redis scriptleri (loglama, audit trail veya downstream ingestion için) bazen legacy tüketicilere XML olarak gönderilmek zorunda. Tablo literal'ini yapıştır, pipeline'a doğrudan giren XML al.

xml2lua ile başka araçlar arasında dönüştürme

XML-to-Lua yönü için <code>xml2lua</code> kullanan takımların testler ve fixture'lar için bazen tersine ihtiyacı olur. Elle yazılmış bir serializer'a bağlanmadan önce bir Lua tablosunun XML olarak nasıl görünmesi gerektiğine dair hızlı, görsel bir kontrol sağlar.

Sık sorulan sorular

Array tarzı ve hash tarzı tablolar nasıl farklı işlenir?

Array tarzı bir tablo ({ "a", "b", "c" }) ebeveyne göre adlandırılmış numaralı çocukları (veya genel bir <item> tag'ı) olan bir kapsayıcı öğeye dönüşür. Hash tarzı bir tablo ({ name = "Ava" }) adlandırılmış çocukları olan bir öğeye dönüşür. Karışık bir tablo — sequence kısmı ve string anahtarlar — hiçbir şey kaybolmasın diye her iki şekli yan yana alır.

Peki string anahtarlara karşı tamsayı anahtarlar?

String anahtarlar doğrudan öğe adları olur: { orderId = "ORD-4821" }<orderId>ORD-4821</orderId>. Sequence olarak kullanılan tamsayı anahtarlar (1, 2, 3, ...) konumsal çocuk olur. Aralıklı tamsayı anahtarlar veya tamsayı olmayan sayısal anahtarlar, eşleme korunsun diye index attribute'u ile yayılır. Alttaki semantik için Lua 5.4 referans el kitabına bak.

İç içe tabloları ve karışık tipleri kaldırır mı?

Evet — keyfi iç içe geçme, karışık string / integer anahtarlar, dizilerde tablolar, tablolarda diziler. İç içe alt tablolar kendi çocuklarıyla iç içe öğeler olarak geçer. Booleanlar true/false olarak yazılır, sayılar literal metin olarak kalır ve nil boş self-closing öğe olur, böylece kayıtlar arasında şekil stabil kalır.

Tire veya rezerve karakter içeren anahtarlara ne olur?

["content-type"] veya ["2024-04"] gibi anahtarlar Lua'da geçerli ama ham XML öğe adı olarak geçersiz. Dönüştürücü bunları güvenli bir tag'e yeniden yazar (örneğin content_type) ve orijinal adı attribute olarak korur. Sıkı round-trip önemliyse, kullanmadan önce çıktıyı gözden geçir.

Bütün bir modül dosyasını yapıştırabilir miyim?

Evet. local bildirimleri, require() satırları, yardımcı fonksiyonlar ve yorumlar yok sayılır. Dosya return t ile bitiyorsa, döndürülen tablo belge kökü olur. Sadece tek bir üst düzey tablo literal'i varsa onun yerine o kullanılır.

Kodum saklanıyor mu?

Kod dönüştürme için backend'e gönderilir ve saklanmaz — payload'u loglamıyoruz. Script hassassa, her online araç gibi davran: önce gizli bilgileri temizle, sonra yapıştır.

İhtiyacın olabilecek diğer araçlar

Lua'dan XML'e bulmacanın bir parçası. Bu araçlar onunla iyi eşleşir: