Sola Elixir yapıştırın ve "Dönüştür"e tıklayın — biz XML’e çeviririzElixir kodu yapıştırın

Bu araç ne yapıyor

Bir Elixir uygulamasını eski bir SOAP uç noktasına bağlıyorsunuz ya da bir XML-RPC entegrasyon testi için fixture hazırlıyorsunuz; struct elinizde ama envelope yok. Her alan için XmlBuilder.element/3 çağrılarını elle yazmak çabuk bıktırıyor. Elixir’i buraya yapıştırın — tek bir %Order{} literali, defstruct içeren bir defmodule ya da birkaç modüllü koca bir dosya olabilir — tek seferde iyi biçimli XML alırsınız. XmlBuilder’ın kuracağı aynı yapıda, tören havası olmadan.

Dönüştürücü Elixir semantiğini bilir. Atom’lar baştaki iki noktayı kaybeder — map anahtarı olarak :is_paid, is_paid eleman adına dönüşür ve true / false metin olarak kalır. Decimal.new("249.99") sarmalayıcısını düşürüp 249.99 olur. DateTime, NaiveDateTime ve Date ISO-8601 dizeleri olarak çıkar. İç içe struct’lar (shipping_address: %Address{} alanlı bir %Order{} gibi) yerinde açılır ve nil değerler atılmak yerine boş elemanlara döner. [sku: "SKU-101", qty: 2] gibi keyword list’ler eşdeğer map ile aynı şekilde ele alınır.

Listeler, struct tipine göre adlandırılan ve her öğe için bir çocuk içeren konteyner elemanlara dönüşür: items: [%OrderItem{}, %OrderItem{}] alanı <items><OrderItem/><OrderItem/></items> olur. Bu, SweetXml’in XML’i tekrar Elixir’e okuma biçimiyle ve altta yatan xmerl kütüphanesinin beklentisiyle örtüşür. Tuple’lar konumsal çocuklarla birlikte bir <tuple> sarmalayıcısı alır. Birden fazla defmodule bloğu yapıştırırsanız her defstruct çıktıya dahil olur. .ex veya .exs dosyanızdaki haliyle yapıştırın — temizlemeye gerek yok.

Nasıl kullanılır

Üç adım. Tek bir struct yapıştırsanız da koca bir Phoenix context dosyası yapıştırsanız da aynı şekilde çalışır.

1

Elixir’inizi yapıştırın (ya da örneği deneyin)

Elixir’inizi soldaki editöre olduğu gibi bırakın. Bir defstruct, bir %Struct{} literali, düz bir map, bir keyword list ya da iç içe struct’lar — hepsi olur. Gerçekçi bir Order / OrderItem / Address örneği için Örnek Yükle’ye tıklayın.

@moduledoc’u çıkarmanız, @derive notlarını silmeniz veya pipe ve yorumları temizlemeniz gerekmez. Elixir kodunu editörünüzdeki haliyle yapıştırın.

2

Dönüştür’e basın

Yeşil Dönüştür düğmesine tıklayın. Araç Elixir’i okur, her alanı korur, iç içe struct’ları muhafaza eder ve XML’i tek seferde kurar. Çalışırken kısa bir yükleme göstergesi döner.

3

XML’i kopyalayın

Sağ panel girintili, iyi biçimli XML ile dolar. Doğrudan bir SOAP istek gövdesine, bir XML-RPC çağrısına, bir test fixture’ına veya entegrasyon süitinizin seed dosyasına yapıştırın.

Gerçekten işe yaradığı yerler

SOAP servisleriyle konuşan Phoenix uygulamaları

Phoenix context’iniz size güzel bir <code>%Order{}</code> veriyor. Karşıdaki tedarikçi yalnızca SOAP konuşuyor. Struct’ı yapıştırın, XML envelope gövdesini alın, isteğe koyun — elle <code>XmlBuilder</code> ağaçları örmeye gerek yok.

XML-RPC entegrasyonları

Eski WordPress eklentileri, legacy CMS’ler, finans akışları — hepsi hâlâ XML-RPC konuşuyor. Elixir struct’ınızı spec’in beklediği <code>&lt;param&gt;&lt;value&gt;&lt;struct&gt;</code> biçimine çevirip <code>HTTPoison</code>’a pipe’layacak hale getirin.

Legacy kurumsal entegrasyonlar

Banka dosyaları, EDI akışları, HL7 tarzı sağlık payload’ları. Bir iş ortağı XML’de ısrar ediyorsa, elinizdeki Elixir modelini yapıştırıp eşleşen bir XML şablonu alın — <code>xmerl</code> ile sıfırdan boğuşmaktan daha hızlıdır.

SweetXml round-trip’leri için fixture’lar

SweetXml ile XML okuyup bir struct ile karşılaştıran test mi yazıyorsunuz? Struct’ı yapıştırın, XML’i alın, fixture olarak kaydedin. Round-trip tutarlı kalır.

Sık sorulan sorular

Birden fazla defmodule / defstruct bloğunu aynı anda yapıştırabilir miyim?

Evet. Koca bir dosya yapıştırabilirsiniz. Her defstruct alanları sapasağlam şekilde çıkar ve iç içe struct referansları açılır. En alta gerçek değerlerle bir %Struct{} literali koyarsanız çıktı o değerleri kullanır — koymazsanız boş elemanlarla biçimi yayar.

Atom’lar nasıl ele alınır?

Map/struct anahtarı olarak kullanılan atom’lar eleman adına dönüşür (baştaki iki nokta düşer — :is_paid, is_paid olur). Boolean nitelikli atom değerleri (true, false, nil) karşılık gelen metne dönüşür. Diğer atom’lar iki noktası silinmiş metin olarak çıkar (:pending, pending olur). Orijinal atom sözdizimi gerekiyorsa, parse sonrası String.to_atom/1 ile işleyin.

Peki Decimal, DateTime, Date, NaiveDateTime?

Decimal.new("249.99") sarmalayıcıyı düşürüp 249.99 olur. DateTime, NaiveDateTime ve Date ISO-8601 dizeleri olarak çıkar. Time, HH:MM:SS biçimine döner. nil değerler atılmak yerine boş elemanlara dönüşür — böylece SweetXml round-trip’lerinde biçim tutarlı kalır.

Listeler, tuple’lar ve keyword list’ler nasıl çevrilir?

Struct listeleri, her öğe için bir çocuk içeren ve struct’a göre adlandırılan konteyner elemanlara dönüşür: items: [%OrderItem{}, ...], <items><OrderItem/><OrderItem/></items> olur. Skaler listeler, konteyner içinde <item> çocukları olur. Tuple’lar konumsal çocuklarla <_0/>, <_1/> şeklinde bir <tuple> sarmalayıcısı alır. Keyword list’ler map olarak ele alınır — her anahtar bir çocuk elemana dönüşür.

Struct’ım Jason / Poison için @derive kullanıyorsa?

@derive notu, JSON kütüphaneleri için bir derleme zamanı ipucudur ve XML çıktısını etkilemez. Tüm struct alanları varsayılan olarak yayılır. Bir alanı atlamak istiyorsanız yapıştırmadan önce defstruct listesinden çıkarın veya değeri dönüştürücünün "atla" olarak tanıyabileceği bir şeyle sarın.

Kodum saklanıyor mu?

Kodunuz dönüşüm için backend’e gönderilir ve kalıcı olarak saklanmaz — payload’ı loglamıyoruz. Çevrimiçi araçlarda her zaman olduğu gibi, kod gerçekten hassassa yapıştırmadan önce bir göz atın.

Size lazım olabilecek diğer araçlar

Elixir’den XML’e bulmacanın bir parçası. Bu araçlarla iyi gider: