Klistra in Elixir till vänster och klicka på "Konvertera" — vi gör om det till XMLKlistra in Elixir-kod

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.

1

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.

2

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.

3

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