Elixir til XML-konverter
Indsæt Elixir-structs eller -maps. Få ren XML retur.
Hvad værktøjet gør
Du kobler en Elixir-app sammen med en gammel SOAP-endpoint, eller bygger en fixture til en XML-RPC-integrationstest, og du har structen, men ikke envelopen. At skrive XmlBuilder.element/3-kald i hånden for hvert felt bliver hurtigt kedeligt. Indsæt Elixiren her — et enkelt %Order{}-literal, en defmodule med et defstruct, eller en hel fil med flere moduler — og du får velformet XML retur på én gang. Samme form, som XmlBuilder ville bygge, uden ceremoniellet.
Konverteren kender Elixir-semantikken. Atoms mister det indledende kolon — :is_paid som map-nøgle bliver til elementnavnet is_paid, og true / false forbliver tekst. Decimal.new("249.99") mister wrapperen og bliver til 249.99. DateTime, NaiveDateTime og Date kommer ud som ISO-8601-strenge. Indlejrede structs (en %Order{} med et shipping_address: %Address{}-felt) foldes ud på stedet, og nil-værdier bliver til tomme elementer i stedet for at blive smidt væk. Keyword lists som [sku: "SKU-101", qty: 2] behandles som den tilsvarende map.
Lister bliver til container-elementer med ét barn pr. item, opkaldt efter struct-typen: et felt items: [%OrderItem{}, %OrderItem{}] bliver til <items><OrderItem/><OrderItem/></items>. Det matcher, hvordan SweetXml læser XML tilbage til Elixir, og hvad xmerl-biblioteket bagved forventer. Tupler får en <tuple>-wrapper med positionelle børn. Hvis du indsætter flere defmodule-blokke, ender hvert defstruct i outputtet. Indsæt det, som det står i din .ex- eller .exs-fil — ingen oprydning nødvendig.
Sådan bruger du det
Tre trin. Virker ens, uanset om du indsætter én struct eller en hel Phoenix-kontekstfil.
Indsæt din Elixir (eller prøv eksemplet)
Smid din Elixir i venstre editor som den er. Et defstruct, et %Struct{}-literal, et almindeligt map, en keyword list eller indlejrede structs — alt går. Klik på Hent eksempel for et realistisk Order / OrderItem / Address-eksempel.
Du behøver ikke fjerne @moduledoc, tage @derive-annotationer ud eller rydde op i pipes og kommentarer. Indsæt Elixir-koden, som den ser ud i din editor.
Tryk på Konverter
Klik på den grønne Konverter-knap. Værktøjet læser Elixiren, bevarer alle felter, holder indlejrede structs og bygger XML’en på én gang. En kort indlæsningsindikator kører imens.
Kopier XML’en
Højre panel fyldes med indrykket, velformet XML. Kopier det direkte over i en SOAP-request-body, et XML-RPC-kald, en testfixture eller seed-filen til din integrationssuite.
Hvornår det virkelig hjælper
Phoenix-apps der taler med SOAP-tjenester
Din Phoenix-kontekst giver dig en pæn <code>%Order{}</code>. Leverandøren nedstrøms taler kun SOAP. Indsæt structen, tag XML-envelope-bodyen, put den i forespørgslen — ingen håndværk med <code>XmlBuilder</code>-træer.
XML-RPC-integrationer
Gamle WordPress-plugins, legacy-CMS’er, finansielle feeds — taler stadig alle sammen XML-RPC. Lav din Elixir-struct om til den <code><param><value><struct></code>-form, som specifikationen forventer, klar til at pipe gennem <code>HTTPoison</code>.
Legacy virksomhedsintegrationer
Bankfiler, EDI-feeds, HL7-agtige sundheds-payloads. Hvis en partner insisterer på XML, indsæt den Elixir-model, du allerede har, og få en matchende XML-skabelon — hurtigere end at slås med <code>xmerl</code> fra bunden.
Fixtures til SweetXml-round-trips
Skriver du en test, der læser XML med SweetXml og sammenligner med en struct? Indsæt structen, få XML’en, gem som fixture. Round-trippen bliver konsistent.
Ofte stillede spørgsmål
Kan jeg indsætte flere defmodule / defstruct-blokke på én gang?
Ja. Indsæt en hel fil. Hvert defstruct kommer igennem med felterne intakt, og referencer til indlejrede structs foldes ud. Hvis du lægger et %Struct{}-literal til sidst med rigtige værdier, bruger outputtet dem — ellers sender det formen ud med tomme elementer.
Hvordan håndteres atoms?
Atoms brugt som map-/struct-nøgler bliver til elementnavne (det indledende kolon forsvinder — :is_paid bliver til is_paid). Atom-værdier der er booleans (true, false, nil) bliver til den tilsvarende tekst. Andre atoms kommer ud som tekst uden kolonet (:pending bliver til pending). Har du brug for den oprindelige atom-syntaks, efterbearbejd med String.to_atom/1 efter parsning.
Og Decimal, DateTime, Date, NaiveDateTime?
Decimal.new("249.99") mister wrapperen og bliver til 249.99. DateTime, NaiveDateTime og Date kommer ud som ISO-8601-strenge. Time bliver til HH:MM:SS. nil-værdier bliver til tomme elementer i stedet for at blive smidt væk — så formen holder sig konsistent i round-trips med SweetXml.
Hvordan oversættes lister, tupler og keyword lists?
Lister af structs bliver til container-elementer med ét barn pr. item, opkaldt efter structen: items: [%OrderItem{}, ...] bliver til <items><OrderItem/><OrderItem/></items>. Lister af skalarer bliver til <item>-børn inde i containeren. Tupler får en <tuple>-wrapper med positionelle børn <_0/>, <_1/>. Keyword lists behandles som maps — hver nøgle bliver til et barn-element.
Hvad hvis min struct bruger @derive til Jason / Poison?
@derive-annotationen er et kompilerings-tidshint til JSON-biblioteker og påvirker ikke XML-outputtet. Alle struct-felter udsendes som standard. Vil du udelade et felt, fjern det fra defstruct-listen før du indsætter, eller pak værdien ind i noget, konverteren kan genkende som "skip".
Gemmes min kode?
Din kode sendes til backenden til konvertering og gemmes ikke — vi logger ikke payloaden. Som altid med online-værktøjer: er koden virkelig følsom, så kig den igennem før du indsætter.
Andre værktøjer du kan få brug for
Elixir til XML er én brik i puslespillet. Disse værktøjer passer godt ind: