Elixir till XML-konverterare
Klistra in Elixir-structs eller -maps. Få ren XML tillbaka.
Vad verktyget gör
Du kopplar en Elixir-app mot en gammal SOAP-endpoint, eller bygger en fixture för ett XML-RPC-integrationstest, och du har structen men inte envelopen. Att handknåda XmlBuilder.element/3-anrop för varje fält blir snabbt tröttsamt. Klistra in Elixirn här — ett enda %Order{}-literal, en defmodule med ett defstruct, eller en hel fil med flera moduler — och du får välformad XML tillbaka i ett svep. Samma form som XmlBuilder skulle bygga, utan ceremonin.
Konverteraren kan Elixir-semantiken. Atoms tappar det inledande kolonet — :is_paid som map-nyckel blir elementnamnet is_paid, och true / false blir text. Decimal.new("249.99") tappar wrappern och blir 249.99. DateTime, NaiveDateTime och Date kommer ut som ISO-8601-strängar. Nästlade structs (en %Order{} med ett shipping_address: %Address{}-fält) expanderas på plats, och nil-värden blir tomma element i stället för att slängas. Keyword lists som [sku: "SKU-101", qty: 2] behandlas likadant som motsvarande map.
Listor blir container-element med ett barn per item, namngivna efter struct-typen: ett fält items: [%OrderItem{}, %OrderItem{}] blir <items><OrderItem/><OrderItem/></items>. Det matchar hur SweetXml läser tillbaka XML till Elixir och vad xmerl-biblioteket under huven förväntar sig. Tupler får en <tuple>-wrapper med positionella barn. Om du klistrar in flera defmodule-block hamnar varje defstruct i utdatan. Klistra in det precis som det står i din .ex- eller .exs-fil — ingen städning behövs.
Så här använder du det
Tre steg. Fungerar likadant oavsett om du klistrar in en struct eller en hel Phoenix-context-fil.
Klistra in din Elixir (eller prova exemplet)
Släpp din Elixir i vänstereditorn som den är. Ett defstruct, ett %Struct{}-literal, en enkel map, en keyword list eller nästlade structs — allt funkar. Klicka på Ladda exempel för ett realistiskt Order / OrderItem / Address-exempel.
Du behöver inte ta bort @moduledoc, rensa @derive-annotationer eller städa pipes och kommentarer. Klistra in Elixir-koden så som den ser ut i din editor.
Tryck på Konvertera
Klicka på den gröna Konvertera-knappen. Verktyget läser Elixirn, behåller varje fält, bevarar nästlade structs och bygger XML:en i ett svep. En kort laddningsindikator snurrar medan det jobbar.
Kopiera XML:en
Högerpanelen fylls med indragen, välformad XML. Kopiera in den rakt i en SOAP-request-body, ett XML-RPC-anrop, en testfixture eller seed-filen för din integrationssvit.
När det verkligen kommer väl till pass
Phoenix-appar som pratar med SOAP-tjänster
Din Phoenix-context ger dig en fin <code>%Order{}</code>. Leverantören nedströms pratar bara SOAP. Klistra in structen, ta XML-envelope-bodyn, stoppa in i förfrågan — inget handbyggande av <code>XmlBuilder</code>-träd.
XML-RPC-integrationer
Gamla WordPress-plugins, legacy-CMS, finansflöden — alla pratar fortfarande XML-RPC. Gör om din Elixir-struct till den <code><param><value><struct></code>-form som specen förväntar sig, klar att skicka via <code>HTTPoison</code>.
Legacy-integrationer i företagsmiljö
Bankfiler, EDI-flöden, HL7-liknande vårdpayloads. Om en partner insisterar på XML, klistra in Elixir-modellen du redan har och få en matchande XML-mall — snabbare än att brottas med <code>xmerl</code> från noll.
Fixtures för SweetXml-round-trips
Skriver du ett test som läser XML med SweetXml och jämför mot en struct? Klistra in structen, ta XML:en, spara som fixture. Round-trippen hålls konsekvent.
Vanliga frågor
Kan jag klistra in flera defmodule / defstruct-block samtidigt?
Ja. Klistra in en hel fil. Varje defstruct kommer igenom med fälten intakta, och nästlade struct-referenser expanderas. Om du lägger ett %Struct{}-literal längst ned med riktiga värden använder utdatan dem — annars skickas formen ut med tomma element.
Hur hanteras atoms?
Atoms som används som map-/struct-nycklar blir elementnamn (det inledande kolonet försvinner — :is_paid blir is_paid). Atom-värden som är booleans (true, false, nil) blir motsvarande text. Andra atoms skickas ut som text utan kolonet (:pending blir pending). Behöver du original-atom-syntaxen, efterbehandla med String.to_atom/1 efter parsning.
Och Decimal, DateTime, Date, NaiveDateTime?
Decimal.new("249.99") tappar wrappern och blir 249.99. DateTime, NaiveDateTime och Date kommer ut som ISO-8601-strängar. Time blir HH:MM:SS. nil-värden blir tomma element i stället för att slängas — så att formen hålls konsekvent för round-trips med SweetXml.
Hur översätts listor, tupler och keyword lists?
Listor med structs blir container-element med ett barn per item, namngivet efter structen: items: [%OrderItem{}, ...] blir <items><OrderItem/><OrderItem/></items>. Listor med skalärer blir <item>-barn inuti containern. Tupler får en <tuple>-wrapper med positionella barn <_0/>, <_1/>. Keyword lists behandlas som maps — varje nyckel blir ett barn-element.
Vad om min struct använder @derive för Jason / Poison?
@derive-annotationen är en kompileringstidsledtråd för JSON-bibliotek och påverkar inte XML-utdatan. Alla struct-fält skickas ut som standard. Vill du utesluta ett fält, ta bort det från defstruct-listan innan du klistrar in, eller linda värdet i något som konverteraren kan känna igen som "skip".
Sparas min kod?
Din kod skickas till backend för konvertering och sparas inte — vi loggar inte payloaden. Som alltid med onlineverktyg: är koden verkligen känslig, ta en koll innan du klistrar in.
Andra verktyg du kan behöva
Elixir till XML är en pusselbit. De här verktygen passar bra ihop med det: