Convertitore Elixir in XML
Incolla struct o map Elixir. Ricevi XML pulito.
Cosa fa questo strumento
Stai collegando un'app Elixir a un endpoint SOAP legacy, o stai preparando una fixture per un test di integrazione XML-RPC, e hai lo struct ma non l'envelope. Scrivere a mano chiamate XmlBuilder.element/3 per ogni campo diventa presto noioso. Incolla l'Elixir qui — un singolo literal %Order{}, un defmodule con un defstruct o un intero file con più moduli — e ottieni XML ben formato in una sola passata. La stessa forma che costruirebbe XmlBuilder, senza il cerimoniale.
Il convertitore conosce la semantica di Elixir. Gli atom perdono i due punti iniziali — :is_paid come chiave di map diventa il nome di elemento is_paid, e true / false restano come testo. Decimal.new("249.99") perde il wrapper e diventa 249.99. DateTime, NaiveDateTime e Date escono come stringhe ISO-8601. Gli struct annidati (un %Order{} con un campo shipping_address: %Address{}) si espandono in loco, e i valori nil diventano elementi vuoti invece di essere scartati. Le keyword list come [sku: "SKU-101", qty: 2] sono trattate come la map equivalente.
Le liste diventano elementi contenitore con un figlio per item, nominati in base al tipo dello struct: un campo items: [%OrderItem{}, %OrderItem{}] diventa <items><OrderItem/><OrderItem/></items>. Corrisponde al modo in cui SweetXml rilegge l'XML in Elixir e a ciò che la libreria xmerl sottostante si aspetta. Le tuple ricevono un wrapper <tuple> con figli posizionali. Se incolli più blocchi defmodule, ogni defstruct finisce nell'output. Incollalo così come sta nel tuo file .ex o .exs — niente pulizia necessaria.
Come si usa
Tre passi. Funziona allo stesso modo sia che incolli un solo struct sia un intero file di contesto Phoenix.
Incolla il tuo Elixir (o prova l'esempio)
Butta il tuo Elixir nell'editor di sinistra così com'è. Un defstruct, un literal %Struct{}, una map semplice, una keyword list o struct annidati — va bene tutto. Clicca Carica esempio per un caso realistico Order / OrderItem / Address.
Non devi togliere @moduledoc, rimuovere le annotazioni @derive o ripulire pipe e commenti. Incolla il codice Elixir così come appare nel tuo editor.
Clicca Converti
Premi il pulsante verde Converti. Lo strumento legge l'Elixir, mantiene ogni campo, preserva gli struct annidati e costruisce l'XML in una passata. Un breve indicatore di caricamento gira mentre lavora.
Copia l'XML
Il pannello di destra si riempie di XML indentato e ben formato. Copialo direttamente nel body di una richiesta SOAP, in una chiamata XML-RPC, in una fixture di test o nel file di seed della tua suite di integrazione.
Quando serve davvero
App Phoenix che parlano con servizi SOAP
Il tuo contesto Phoenix ti passa un bel <code>%Order{}</code>. Il vendor a valle parla solo SOAP. Incolla lo struct, prendi il body dell'envelope XML, infilalo nella richiesta — niente costruzione a mano di alberi <code>XmlBuilder</code>.
Integrazioni XML-RPC
Vecchi plugin WordPress, CMS legacy, feed finanziari — tutti parlano ancora XML-RPC. Trasforma il tuo struct Elixir nella forma <code><param><value><struct></code> che la spec si aspetta, pronto da passare a <code>HTTPoison</code>.
Integrazioni enterprise legacy
File bancari, feed EDI, payload sanitari stile HL7. Se un partner insiste su XML, incolla il modello Elixir che già hai e ricevi un template XML corrispondente — più veloce che lottare con <code>xmerl</code> da zero.
Fixture per round-trip con SweetXml
Stai scrivendo un test che legge XML con SweetXml e lo confronta con uno struct? Incolla lo struct, prendi l'XML, salvalo come fixture. Il round-trip resta coerente.
Domande comuni
Posso incollare più blocchi defmodule / defstruct insieme?
Sì. Incolla un intero file. Ogni defstruct passa con i suoi campi intatti, e i riferimenti a struct annidati vengono espansi. Se includi in fondo un literal %Struct{} con valori reali, l'output usa quei valori — altrimenti emette la forma con elementi vuoti.
Come vengono gestiti gli atom?
Gli atom usati come chiavi di map/struct diventano nomi di elemento (i due punti iniziali cadono — :is_paid diventa is_paid). I valori atom booleani (true, false, nil) diventano il testo corrispondente. Gli altri atom escono come testo senza i due punti (:pending diventa pending). Se ti serve la sintassi atom originale, post-processa con String.to_atom/1 dopo il parsing.
E per Decimal, DateTime, Date, NaiveDateTime?
Decimal.new("249.99") perde il wrapper e diventa 249.99. DateTime, NaiveDateTime e Date escono come stringhe ISO-8601. Time diventa HH:MM:SS. I valori nil diventano elementi vuoti invece di essere scartati — così la forma resta coerente per i round-trip con SweetXml.
Come vengono tradotte liste, tuple e keyword list?
Le liste di struct diventano elementi contenitore con un figlio per item, nominato come lo struct: items: [%OrderItem{}, ...] diventa <items><OrderItem/><OrderItem/></items>. Le liste di scalari diventano figli <item> dentro il contenitore. Le tuple ricevono un wrapper <tuple> con figli posizionali <_0/>, <_1/>. Le keyword list sono trattate come map — ogni chiave diventa un elemento figlio.
E se il mio struct usa @derive per Jason / Poison?
L'annotazione @derive è un'indicazione a tempo di compilazione per le librerie JSON e non incide sull'output XML. Tutti i campi dello struct vengono emessi di default. Se vuoi omettere un campo, toglilo dalla lista defstruct prima di incollare, o avvolgi il valore in qualcosa che il convertitore possa riconoscere come "skip".
Il mio codice viene memorizzato?
Il tuo codice viene inviato al backend per la conversione e non viene persistito — non logghiamo il payload. Come sempre con gli strumenti online, se il codice è davvero sensibile, dagli un'occhiata prima di incollarlo.
Altri strumenti che potrebbero servirti
Elixir in XML è un pezzo del puzzle. Questi strumenti si abbinano bene: