Incolla Elixir a sinistra e clicca "Converti" — lo trasformiamo in XMLIncolla codice Elixir

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.

1

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.

2

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.

3

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>&lt;param&gt;&lt;value&gt;&lt;struct&gt;</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: