Elixir til XML-konverter
Lim inn Elixir-structs eller -maps. Få ren XML tilbake.
Hva verktøyet gjør
Du kobler en Elixir-app mot en gammel SOAP-endepunkt, eller lager en fixture til en XML-RPC-integrasjonstest, og du har structen, men ikke envelopen. Å skrive XmlBuilder.element/3-kall for hånd til hvert felt blir fort kjedelig. Lim inn Elixiren her — et enkelt %Order{}-literal, en defmodule med et defstruct, eller en hel fil med flere moduler — og du får velformet XML tilbake i én omgang. Samme form som XmlBuilder ville bygget, uten seremoniellet.
Konverteren forstår Elixir-semantikken. Atoms mister det innledende kolonet — :is_paid som map-nøkkel blir elementnavnet is_paid, og true / false blir tekst. Decimal.new("249.99") mister wrapperen og blir 249.99. DateTime, NaiveDateTime og Date kommer ut som ISO-8601-strenger. Nestede structs (en %Order{} med et shipping_address: %Address{}-felt) foldes ut der de står, og nil-verdier blir tomme elementer i stedet for å bli kastet. Keyword lists som [sku: "SKU-101", qty: 2] behandles som den tilsvarende mappen.
Lister blir containerelementer med ett barn per item, navngitt etter struct-typen: et felt items: [%OrderItem{}, %OrderItem{}] blir <items><OrderItem/><OrderItem/></items>. Det matcher hvordan SweetXml leser XML tilbake til Elixir, og hva xmerl-biblioteket under panseret forventer. Tupler får en <tuple>-wrapper med posisjonelle barn. Limer du inn flere defmodule-blokker, havner hvert defstruct i utdataen. Lim det inn slik det står i .ex- eller .exs-filen din — ingen opprydding nødvendig.
Slik bruker du det
Tre steg. Fungerer likt enten du limer inn én struct eller en hel Phoenix-kontekstfil.
Lim inn Elixiren (eller prøv eksempelet)
Slipp Elixiren inn i venstre editor som den er. Et defstruct, et %Struct{}-literal, et enkelt map, en keyword list eller nestede structs — alt går. Klikk Last inn eksempel for et realistisk Order / OrderItem / Address-eksempel.
Du trenger ikke fjerne @moduledoc, ta bort @derive-annotasjoner eller rydde i pipes og kommentarer. Lim inn Elixir-koden slik den ser ut i editoren din.
Trykk Konverter
Klikk den grønne Konverter-knappen. Verktøyet leser Elixiren, beholder hvert felt, bevarer nestede structs og bygger XML-en i én omgang. En kort lasteindikator går mens det jobber.
Kopier XML-en
Høyre panel fylles med innrykket, velformet XML. Kopier det rett inn i en SOAP-forespørselsbody, et XML-RPC-kall, en testfixture eller seed-filen til integrasjonssuiten din.
Når det virkelig kommer godt med
Phoenix-apper som snakker med SOAP-tjenester
Phoenix-konteksten din gir deg en fin <code>%Order{}</code>. Leverandøren nedstrøms snakker bare SOAP. Lim inn structen, ta XML-envelope-bodyen, legg i forespørselen — ingen håndbygging av <code>XmlBuilder</code>-trær.
XML-RPC-integrasjoner
Gamle WordPress-plugins, legacy-CMS-er, finansfeeder — snakker alle fremdeles XML-RPC. Gjør Elixir-structen din om til <code><param><value><struct></code>-formen spesifikasjonen forventer, klar til å sende gjennom <code>HTTPoison</code>.
Legacy-integrasjoner i bedrifter
Bankfiler, EDI-feeder, HL7-lignende helsedata. Hvis en partner insisterer på XML, lim inn Elixir-modellen du allerede har og få en matchende XML-mal — raskere enn å slåss med <code>xmerl</code> fra bunnen.
Fixtures til SweetXml-round-trips
Skriver du en test som leser XML med SweetXml og sammenligner med en struct? Lim inn structen, hent XML-en, lagre som fixture. Round-trippen holder seg konsistent.
Vanlige spørsmål
Kan jeg lime inn flere defmodule / defstruct-blokker på én gang?
Ja. Lim inn en hel fil. Hvert defstruct kommer gjennom med feltene intakte, og referanser til nestede structs foldes ut. Legger du et %Struct{}-literal nederst med ekte verdier, bruker utdataen dem — ellers sender den ut formen med tomme elementer.
Hvordan håndteres atoms?
Atoms som brukes som map-/struct-nøkler blir elementnavn (det innledende kolonet forsvinner — :is_paid blir is_paid). Atom-verdier som er booleans (true, false, nil) blir tilsvarende tekst. Andre atoms sendes ut som tekst uten kolonet (:pending blir pending). Trenger du den opprinnelige atom-syntaksen, etterbehandle med String.to_atom/1 etter parsing.
Og Decimal, DateTime, Date, NaiveDateTime?
Decimal.new("249.99") mister wrapperen og blir 249.99. DateTime, NaiveDateTime og Date kommer ut som ISO-8601-strenger. Time blir HH:MM:SS. nil-verdier blir tomme elementer i stedet for å bli kastet — slik at formen holder seg konsistent i round-trips med SweetXml.
Hvordan oversettes lister, tupler og keyword lists?
Lister av structs blir containerelementer med ett barn per item, navngitt etter structen: items: [%OrderItem{}, ...] blir <items><OrderItem/><OrderItem/></items>. Lister av skalarer blir <item>-barn inni containeren. Tupler får en <tuple>-wrapper med posisjonelle barn <_0/>, <_1/>. Keyword lists behandles som maps — hver nøkkel blir et barn-element.
Hva hvis structen min bruker @derive for Jason / Poison?
@derive-annotasjonen er et kompileringstidshint for JSON-biblioteker og påvirker ikke XML-utdataen. Alle struct-felt sendes ut som standard. Vil du hoppe over et felt, fjern det fra defstruct-listen før du limer inn, eller pakk inn verdien i noe konverteren kan gjenkjenne som "skip".
Lagres koden min?
Koden din sendes til backend for konvertering og lagres ikke — vi logger ikke payloaden. Som alltid med onlineverktøy: er koden virkelig sensitiv, ta en titt før du limer inn.
Andre verktøy du kan få bruk for
Elixir til XML er én brikke i puslespillet. Disse verktøyene passer godt sammen med det: