Wklej Elixira po lewej i kliknij "Konwertuj" — zamienimy to na XMLWklej kod Elixir

Co robi to narzędzie

Podpinasz aplikację Elixir do starego endpointu SOAP albo szykujesz fixture do testu integracyjnego XML-RPC, a masz struct, ale nie kopertę. Pisanie ręcznie wywołań XmlBuilder.element/3 dla każdego pola szybko się nudzi. Wklej Elixira tutaj — pojedynczy literał %Order{}, defmodule z defstruct albo cały plik z kilkoma modułami — i dostaniesz dobrze uformowany XML za jednym zamachem. Tę samą postać, którą zbudowałby XmlBuilder, bez ceremoniału.

Konwerter rozumie semantykę Elixira. Atomy tracą dwukropek z przodu — :is_paid jako klucz mapy staje się nazwą elementu is_paid, a true / false zostają jako tekst. Decimal.new("249.99") traci wrapper i staje się 249.99. DateTime, NaiveDateTime i Date wychodzą jako ciągi ISO-8601. Zagnieżdżone struct (np. %Order{} z polem shipping_address: %Address{}) rozwijają się w miejscu, a wartości nil stają się pustymi elementami zamiast być wyrzucane. Keyword listy w stylu [sku: "SKU-101", qty: 2] traktowane są tak samo jak równoważna mapa.

Listy stają się elementami kontenerowymi z jednym dzieckiem na pozycję, nazwanymi według typu struct: pole items: [%OrderItem{}, %OrderItem{}] zamienia się w <items><OrderItem/><OrderItem/></items>. To pasuje do tego, jak SweetXml czyta XML z powrotem do Elixira i do tego, czego oczekuje biblioteka xmerl pod spodem. Krotki dostają wrapper <tuple> z dziećmi pozycyjnymi. Jeśli wkleisz kilka bloków defmodule, każdy defstruct ląduje w wyniku. Wklej to tak, jak siedzi w twoim pliku .ex lub .exs — nic nie trzeba sprzątać.

Jak tego używać

Trzy kroki. Działa tak samo, czy wkleisz jednego structa, czy cały plik kontekstu Phoenix.

1

Wklej swój Elixir (albo wypróbuj przykład)

Wrzuć Elixira do lewego edytora jak leci. defstruct, literał %Struct{}, zwykła mapa, keyword lista albo zagnieżdżone struct — wszystko OK. Kliknij Wczytaj przykład, żeby zobaczyć realistyczne Order / OrderItem / Address.

Nie musisz usuwać @moduledoc, czyścić adnotacji @derive ani porządkować pipe’ów i komentarzy. Wklej kod Elixira tak, jak wygląda w twoim edytorze.

2

Kliknij Konwertuj

Naciśnij zielony przycisk Konwertuj. Narzędzie czyta Elixira, zachowuje każde pole, utrzymuje zagnieżdżone struct i buduje XML za jednym zamachem. Przez chwilę leci krótki wskaźnik ładowania.

3

Skopiuj XML

Prawy panel wypełni się wcięciowanym, dobrze uformowanym XML-em. Skopiuj go prosto do ciała żądania SOAP, wywołania XML-RPC, fixture’a testowego albo pliku seed twojego zestawu integracyjnego.

Kiedy się naprawdę przydaje

Aplikacje Phoenix rozmawiające z usługami SOAP

Twój kontekst Phoenix daje ci ładnego <code>%Order{}</code>. Dostawca po drugiej stronie mówi tylko SOAP-em. Wklej structa, weź body koperty XML, wrzuć do żądania — bez ręcznego klecenia drzew <code>XmlBuilder</code>.

Integracje XML-RPC

Stare wtyczki WordPressa, legacy CMS-y, feedy finansowe — wszystkie nadal mówią XML-RPC. Przerób swojego Elixir structa na formę <code>&lt;param&gt;&lt;value&gt;&lt;struct&gt;</code>, której oczekuje spec, gotową do wrzucenia w <code>HTTPoison</code>.

Legacy integracje korporacyjne

Pliki bankowe, feedy EDI, payloady zdrowotne w stylu HL7. Jeśli partner upiera się przy XML-u, wklej model Elixira, który już masz, i dostań pasujący szablon XML — szybciej niż walka z <code>xmerl</code> od zera.

Fixture’y do round-tripów SweetXml

Piszesz test, który czyta XML przez SweetXml i porównuje go ze structem? Wklej structa, weź XML, zapisz jako fixture. Round-trip zostaje spójny.

Częste pytania

Czy mogę wkleić wiele bloków defmodule / defstruct naraz?

Tak. Wklej cały plik. Każdy defstruct przechodzi z polami w całości, a odwołania do zagnieżdżonych struct są rozwijane. Jeśli na dole dodasz literał %Struct{} z prawdziwymi wartościami, wynik użyje tych wartości — inaczej emituje formę z pustymi elementami.

Jak obsługiwane są atomy?

Atomy używane jako klucze map/struct stają się nazwami elementów (dwukropek z przodu znika — :is_paid staje się is_paid). Wartości atomowe będące booleanami (true, false, nil) zamieniają się w odpowiedni tekst. Inne atomy trafiają jako tekst bez dwukropka (:pendingpending). Jeśli potrzebujesz oryginalnej składni atomu, przetwórz po parsowaniu przez String.to_atom/1.

A co z Decimal, DateTime, Date, NaiveDateTime?

Decimal.new("249.99") traci wrapper i staje się 249.99. DateTime, NaiveDateTime i Date wychodzą jako ciągi ISO-8601. Time zamienia się w HH:MM:SS. Wartości nil stają się pustymi elementami zamiast być wyrzucane — dzięki temu forma zostaje spójna dla round-tripów z SweetXml.

Jak tłumaczone są listy, krotki i keyword listy?

Listy structów stają się elementami kontenerowymi z jednym dzieckiem na pozycję, nazwanymi według struct: items: [%OrderItem{}, ...] zamienia się w <items><OrderItem/><OrderItem/></items>. Listy skalarów stają się dziećmi <item> wewnątrz kontenera. Krotki dostają wrapper <tuple> z dziećmi pozycyjnymi <_0/>, <_1/>. Keyword listy traktowane są jak mapy — każdy klucz staje się dzieckiem.

Co, jeśli mój struct używa @derive dla Jason / Poison?

Adnotacja @derive to podpowiedź kompilacyjna dla bibliotek JSON i nie wpływa na wyjście XML. Wszystkie pola struct są emitowane domyślnie. Jeśli chcesz pominąć pole, usuń je z listy defstruct przed wklejeniem albo opakuj wartość w coś, co konwerter rozpozna jako "skip".

Czy mój kod jest zapisywany?

Twój kod trafia do backendu na potrzeby konwersji i nie jest utrwalany — nie logujemy payloadu. Jak zawsze przy narzędziach online: jeśli kod jest naprawdę wrażliwy, przejrzyj go przed wklejeniem.

Inne narzędzia, które mogą się przydać

Elixir na XML to jeden element układanki. Te narzędzia dobrze z nim grają: