F# to XML Dönüştürücü
F# record ya da değer yapıştır. Temiz XML al.
Bu araç ne yapar
F# yazıyor ve .NET XML konfig dosyaları, WCF kontratları veya SOAP endpoint'leri civarında çalışıyorsan acıyı zaten biliyorsundur: record tiplerin temiz ve ifade gücü yüksektir ama onlara uyan XML'i elle yazmak tam bir çile. F#'ı buraya yapıştır, iyi biçimlenmiş XML'i tek geçişte geri al — tek bir record, değer atanmış bir let binding'i veya iç içe record'larla dolu bütün bir modül.
Dönüştürücü, gerçekten önemsediğin F# gariplerini tanır. Some "x" tutan bir option<string> normal bir element olur; None atılmak yerine boş bir element olur, böylece XML şeklin öngörülebilir kalır. decimal sabitleri (249.99m) son eki düşürür. list, seq ve array'ler her öğe için bir çocukla konteyner element olur — .NET üzerinden round-trip yaptığında System.Xml.Serialization'ın arka planda ürettiğiyle uyumludur.
Discriminated union'lar aklıselim şekilde ele alınır — case adı element tag'i olur, payload ise çocuk elementlere dönüşür. İç içe record'lar inline olarak açılır, tuple alanları kardeş elementler olarak gelir ve Map<K,V>, <Entry><Key/><Value/></Entry> çiftlerine dönüşür. Attribute tabanlı özelleştirme için ([<XmlElement>], [<XmlAttribute>]) F#'ın .NET interop belgelerine göz at — dönüştürücü, varlarsa onlara saygı gösterir.
Nasıl kullanılır
Üç adım. Tek satırlık bir record yapıştırsan da bütün bir modülü yapıştırsan da aynı işliyor.
F#’ını yapıştır (ya da örneği dene)
F#'ını olduğu gibi soldaki editöre bırak. Bir record type, değer atanmış bir let binding, birden fazla record ya da bir discriminated union — hepsi olur. Gerçekçi bir örneği önce görmek için Örnek Yükle’ye tıkla.
open ifadelerini kaldırmana ya da F# söz dizimini temizlemene gerek yok. Kodu Rider ya da VS Code'da göründüğü gibi bırak. Sadece yapıştır.
Dönüştür’e bas
Yeşil Dönüştür düğmesine tıkla. Araç record'ları parse eder, değer atanmış değeri dolaşır ve XML'i tek geçişte üretir. Çalışırken kısa bir yükleme göstergesi görünür.
XML’i kopyala
Sağ panel, standartlara uyumlu herhangi bir parser'ın kabul edeceği girintili, iyi biçimlenmiş XML ile dolar. Doğrudan app.config'ine, bir SOAP fixture'ına, bir XmlSerializer round-trip testine veya dokümanlarına yapıştır.
Gerçekten işe yaradığı yerler
.NET XML konfig dosyaları
Bir app.config / web.config bölümünü modelleyen bir F# record'u, düzenlemeye hazır bir XML şablonuna dönüşür — elle angle bracket yazmak yok.
WCF ve SOAP fixture'ları
Bir WCF data contract'ını yansıtan bir F# record'un var. Yapıştır, SOAP biçimli body'yi al, SoapUI veya Postman'e koy.
Eski XML endpoint'lerle Fable interop'u
Fable ile eski bir XML API'sine mi konuşuyorsun? Paylaşılan F# record'unu yapıştır, backend'inin beklediği XML body'yi al — option alanları da doğru şekilde ele alınır.
XmlSerializer için test verisi
<code>XmlSerializer<T></code> üzerinden sürprizsiz şekilde round-trip yapan XML tohum verisi üret — entegrasyon testleri, mock server'lar ve regresyon süitleri için faydalı.
Sık sorulan sorular
Birden fazla record'u aynı anda yapıştırabilir miyim?
Evet — bütün bir modülü yapıştır. Her record tipi, iç içe record'lar açılmış halde gelir ve and ile zincirlenmiş tip tanımları da ele alınır. Discriminated union case'leri, case adını element tag'i olarak korur.
option, None ve varsayılanlar nasıl ele alınır?
Some "x" içeren bir option<string>, metni içinde tutan normal bir element olur. None boş bir element olur, böylece şekil sabit kalır — değerleri olan record'larla olmayanlar arasında alan kaybetmezsin. voption da aynı şekilde davranır.
decimal, DateTime, Guid ve zor tipler?
Decimal'ler (249.99m) son eki düşürüp düz sayısal metin olur. DateTime, DateTimeOffset ve TimeSpan, ISO-8601 string'i olur. Guid, kanonik 8-4-4-4-12 hex formatında kalır. byte[], base64 metni olur — XmlSerializer davranışıyla uyumlu.
Discriminated union'lar çalışıyor mu?
Evet. type Status = Active | Suspended of reason: string gibi bir DU, argümansız case için <Active/>, payload'lı case için <Suspended><reason>...</reason></Suspended> üretir. Case adı element tag'i olur — bir schema'ya uyan XML için genelde istediğin budur.
Kodum saklanıyor mu?
Kodun dönüşüm için backend'e gönderilir ve kalıcı hale getirilmez — payload'ı loglamayız. F# hassassa (dahili kontratlar, sabit içindeki API anahtarları), yapıştırmadan önce bir göz at.
Peki F# computation expression ya da active pattern kullanıyorsa?
Onlar XML alanı üretmez — veri değil, akış kontrol yapısıdır. Biz record tip tanımlarına ve değer atanmış örneğe bakıyoruz, yani bir async { ... } veya banana-clip pattern match göz ardı edilir. Parser'ın çiğneyeceği temiz bir şey kalması için önce bariz söz dizimi hatalarını düzelt.
İhtiyacın olabilecek diğer araçlar
F# to XML bir parça. Bunlar onunla iyi eşleşir: