Indsæt Elixir til venstre og klik på "Konverter" — vi laver det om til XMLIndsæt Elixir-kode

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.

1

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.

2

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.

3

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