Convertisseur Elixir vers XML
Collez un struct ou une map Elixir. Récupérez du XML propre.
Ce que fait cet outil
Vous branchez une appli Elixir sur un endpoint SOAP legacy, ou vous préparez une fixture pour un test d'intégration XML-RPC, et vous avez le struct mais pas l'enveloppe. Écrire à la main des appels XmlBuilder.element/3 pour chaque champ devient vite pénible. Collez l'Elixir ici — un seul littéral %Order{}, un defmodule avec un defstruct, ou un fichier entier avec plusieurs modules — et vous obtenez du XML bien formé en une passe. La même forme que construirait XmlBuilder, sans le cérémonial.
Le convertisseur connaît la sémantique d'Elixir. Les atomes perdent les deux-points de tête — :is_paid comme clé de map devient le nom d'élément is_paid, et true / false restent en texte. Decimal.new("249.99") perd son enveloppe et devient 249.99. DateTime, NaiveDateTime et Date sortent en chaînes ISO-8601. Les structs imbriqués (un %Order{} avec un champ shipping_address: %Address{}) s'étendent sur place, et les valeurs nil deviennent des éléments vides au lieu d'être supprimées. Les listes de mots-clés comme [sku: "SKU-101", qty: 2] sont traitées comme la map équivalente.
Les listes deviennent des éléments conteneurs avec un enfant par item, nommés d'après le type du struct : un champ items: [%OrderItem{}, %OrderItem{}] se transforme en <items><OrderItem/><OrderItem/></items>. Ça correspond à la façon dont SweetXml relit le XML vers de l'Elixir et à ce que la bibliothèque xmerl en dessous attend. Les tuples reçoivent une enveloppe <tuple> avec des enfants positionnels. Si vous collez plusieurs blocs defmodule, chaque defstruct atterrit dans la sortie. Collez-le tel qu'il est dans votre fichier .ex ou .exs — pas de nettoyage nécessaire.
Comment l'utiliser
Trois étapes. Fonctionne pareil que vous colliez un seul struct ou un fichier de contexte Phoenix entier.
Collez votre Elixir (ou essayez l'exemple)
Déposez votre Elixir dans l'éditeur de gauche tel quel. Un defstruct, un littéral %Struct{}, une map simple, une liste de mots-clés ou des structs imbriqués — tout passe. Cliquez sur Charger un exemple pour un cas réaliste Order / OrderItem / Address.
Pas besoin de retirer @moduledoc, de supprimer les annotations @derive ou de nettoyer les pipes et commentaires. Collez le code Elixir tel qu'il apparaît dans votre éditeur.
Cliquez sur Convertir
Cliquez sur le bouton vert Convertir. L'outil lit l'Elixir, conserve chaque champ, préserve les structs imbriqués et construit le XML en une passe. Un bref indicateur de chargement s'affiche pendant le traitement.
Copiez le XML
Le panneau de droite se remplit de XML indenté et bien formé. Copiez-le directement dans un corps de requête SOAP, un appel XML-RPC, une fixture de test ou le fichier de seed de votre suite d'intégration.
Quand ça sert vraiment
Applis Phoenix qui parlent à des services SOAP
Votre contexte Phoenix vous rend un joli <code>%Order{}</code>. Le prestataire en aval ne parle que SOAP. Collez le struct, récupérez le corps de l'enveloppe XML, mettez-le dans la requête — pas besoin de fabriquer à la main des arbres <code>XmlBuilder</code>.
Intégrations XML-RPC
Vieux plugins WordPress, CMS legacy, flux financiers — tous parlent encore XML-RPC. Transformez votre struct Elixir en la forme <code><param><value><struct></code> attendue par la spec, prête à passer par <code>HTTPoison</code>.
Intégrations entreprise legacy
Fichiers bancaires, flux EDI, payloads santé façon HL7. Si un partenaire insiste sur XML, collez le modèle Elixir que vous avez déjà et récupérez un template XML assorti — plus rapide que de se battre avec <code>xmerl</code> depuis zéro.
Fixtures pour aller-retour SweetXml
Vous écrivez un test qui lit du XML avec SweetXml et le compare à un struct ? Collez le struct, récupérez le XML, sauvez-le en fixture. L'aller-retour reste cohérent.
Questions fréquentes
Puis-je coller plusieurs blocs defmodule / defstruct d'un coup ?
Oui. Collez un fichier entier. Chaque defstruct ressort avec ses champs intacts, et les références aux structs imbriqués sont étendues. Si vous incluez un littéral %Struct{} en bas avec de vraies valeurs, la sortie utilise ces valeurs — sinon elle émet la forme avec des éléments vides.
Comment les atomes sont-ils gérés ?
Les atomes utilisés comme clés de map/struct deviennent des noms d'élément (les deux-points de tête disparaissent — :is_paid devient is_paid). Les valeurs atomes qui sont des booléens (true, false, nil) deviennent le texte correspondant. Les autres atomes sont émis en texte sans les deux-points (:pending devient pending). Si vous avez besoin de la syntaxe d'atome d'origine, post-traitez avec String.to_atom/1 après parsing.
Et pour Decimal, DateTime, Date, NaiveDateTime ?
Decimal.new("249.99") perd son enveloppe et devient 249.99. DateTime, NaiveDateTime et Date sortent en chaînes ISO-8601. Time devient HH:MM:SS. Les valeurs nil deviennent des éléments vides au lieu d'être supprimées — la forme reste donc cohérente pour les allers-retours avec SweetXml.
Comment les listes, tuples et listes de mots-clés sont-ils traduits ?
Les listes de structs deviennent des éléments conteneurs avec un enfant par item, nommé d'après le struct : items: [%OrderItem{}, ...] devient <items><OrderItem/><OrderItem/></items>. Les listes de scalaires deviennent des enfants <item> dans le conteneur. Les tuples reçoivent une enveloppe <tuple> avec des enfants positionnels <_0/>, <_1/>. Les listes de mots-clés sont traitées comme des maps — chaque clé devient un élément enfant.
Et si mon struct utilise @derive pour Jason / Poison ?
L'annotation @derive est un indice de compilation pour les bibliothèques JSON et n'affecte pas la sortie XML. Tous les champs du struct sont émis par défaut. Si vous voulez omettre un champ, retirez-le de la liste defstruct avant de coller, ou enveloppez la valeur dans quelque chose que le convertisseur peut reconnaître comme "skip".
Mon code est-il stocké ?
Votre code est envoyé au backend pour la conversion et n'est pas persisté — on ne logue pas le payload. Comme toujours avec les outils en ligne, si le code est vraiment sensible, jetez-y un œil avant de le coller.
Autres outils qui pourraient vous servir
Elixir vers XML n'est qu'une pièce du puzzle. Ces outils font bon ménage avec :