Swift’ten XML’e Dönüştürücü
Swift struct’larını ya da veri dolu bir örneği yapıştırın. Geriye temiz XML alın.
Bu araç ne yapıyor
Hiç bir Swift struct’ını birebir yansıtan XML’i elle yazmak zorunda kaldınız mı — bir plist için, legacy bir ERP ile konuşan bir SOAP client için ya da bir XMLParser test fixture’ı için — ne kadar süslü parantez yazdığınızı bilirsiniz. Swift’i buraya yapıştırın, tek seferde iyi biçimli XML geri alın. Tek bir struct, birkaç struct ve enum içeren bir dosya ya da veri dolu bir let order = Order(...) örneği — sonuç aynı: her property’nin korunduğu, eksiksiz bir XML dokümanı.
Bu aptal bir string değiştirme değil. Dönüştürücü, Swift’in gerçekten nasıl serialize ettiğini biliyor — kabaca Codable tabanlı bir XMLEncoder’ın ele alacağı şekilde. Decimal değerler düz sayısal metin olarak çıkar, Date ISO-8601 stringe, UUID standart 8-4-4-4-12 hex formatına dönüşür; nil olan Optional<T> kaybolmak yerine boş bir eleman olur. Diziler tutarlı bir container şeklini izler — her dizi, eleman tipine göre adlandırılmış her öğe için bir çocuk barındıran bir wrapper eleman olur.
Coding özelleştirmeleri de dikkate alınır. İç içe geçmiş bir enum CodingKeys: String, CodingKey, çıktının property adlarını yeniden eşler; böylece struct’a dokunmadan orderId, XML’de OrderId olarak çıkabilir. İç içe struct ve enum’lar inline olarak açılır. Birden fazla tip yapıştırırsanız her biri şeklini koruyarak çıktıya düşer — dönüştürücü, Swift API Design Guidelines ile aynı büyük tasarım hedeflerini takip ettiği için adlar ve casing tahmin edilebilir kalır.
Nasıl kullanılır
Üç adım. Beş satırlık bir struct yapıştırsanız da komple bir model dosyası yapıştırsanız da aynı şekilde çalışır.
Swift’inizi yapıştırın (veya örneği deneyin)
Swift’i soldaki editöre olduğu gibi atın. Bir struct, associated value’lu bir enum, veri dolu bir let örneği ya da birden fazla tip içeren bir dosya — hepsi olur. Önce gerçekçi bir örnek görmek isterseniz Örnek yükle’ye tıklayın.
import ifadelerini silmenize, @propertyWrapper’ları kaldırmanıza ya da Swift söz dizimini temizlemenize gerek yok. Kodu Xcode’da göründüğü gibi bırakın. Sadece yapıştırın.
Dönüştür’e tıklayın
Yeşil Dönüştür düğmesine tıklayın. Araç Swift’i okur, her tipi ve property’yi korur ve XML’i tek seferde oluşturur. Çalışırken kısa bir yüklenme göstergesi görünür.
XML’i kopyalayın
Sağdaki panel, standartlara uyan herhangi bir XML parser’ının (XMLParser, lxml, System.Xml, adını siz koyun) kabul edeceği, girintili ve iyi biçimli XML ile dolar. Doğrudan plist’inize, SOAP body’nize ya da test fixture’ınıza kopyalayın.
Gerçekten işe yaradığı durumlar
iOS / macOS plist üretimi
Bir Swift ayar struct’ından doğrudan Xcode’a bırakabileceğiniz Info.plist tarzı bir XML dokümanı çıkarın — elle yazılmış <code><key></key></code> çiftleri, whitespace hataları yok. Decode tarafında Apple’ın <a href="https://developer.apple.com/documentation/foundation/propertylistserialization" target="_blank" rel="noopener">PropertyListSerialization</a> API’ları ile iyi uyum sağlar.
Apple platformlarında SOAP client’ları
Bir Swift request tipinin uygulamadan SOAP olarak çıkması gerekiyor. Struct’ı yapıştırın, XML body’yi SoapUI’ya ya da Postman’e atın; envelope’u elle yazmadan sözleşmeyi doğrulayın.
Test fixture’larını tohumlamak
Bir unit test’indeki veri dolu bir <code>let order = Order(...)</code>’ı, XCTest entegrasyon testleri, mock sunucular ya da hâlâ XML konuşan backend sistemleri için XML seed dosyasına çevirin.
Dokümantasyonu senkron tutmak
README’ler, dahili wiki’ler ya da XSD tabanlı şema dokümanları için XML örneklerini doğrudan gerçek Swift modellerinizden üretin; böylece dokümantasyon asla koddan kopmaz.
Sık sorulan sorular
Birden fazla struct’ı aynı anda yapıştırabilir miyim?
Evet — komple bir dosya yapıştırın. Her üst seviye struct veya enum, iç içe tipleri açılmış ve default değerleri doldurulmuş halde çıkar. Hiçbir şey sessizce düşürülmez.
CodingKeys’i dikkate alıyor mu?
Evet. İç içe geçmiş bir enum CodingKeys: String, CodingKey, XML çıktısında property adlarını yeniden eşler — case orderId = "OrderId", <orderId> yerine <OrderId> üretir. CodingKeys’te yer almayan property’ler Swift adına geri düşer. Bu, pratikteki Codable davranışıyla örtüşür.
Decimal, Date ve Optional nasıl ele alınır?
Decimal düz sayısal metin olarak çıkar. Date ISO-8601 string olur. UUID standart 8-4-4-4-12 hex string olur. nil olan Optional<T> kaybolmak yerine boş bir eleman olur — böylece XSD’ye göre doğrulayan tüketiciler için şekil tutarlı kalır.
Peki associated value’lu enum’lar ve diziler?
Associated value’lu enum’lar, casei adlandıran bir discriminator attribute’ı ve associated value’lar için çocuk elemanlar ile çıkar — round-trip için yeterli. Diziler, eleman tipine göre adlandırılmış her öğe için bir çocuk içeren bir container eleman olur. Dictionary<K,V>, <Entry><Key/><Value/></Entry> container’ı olur.
Kodum saklanıyor mu?
Kodunuz dönüştürme için backende gönderilir ve kalıcı olarak tutulmaz — payload’u loglamayız. Online araçlarda her zaman olduğu gibi, kod gerçekten hassasa yapıştırmadan önce bir göz atın.
Swift’te property wrapper, protocol ya da computed property varsa?
Property wrapper’lar çıktıda alttaki değere açılır. Protokoller şekil tanımlar, içerik değil; bu yüzden doğrudan XML üretmezler — ama onlara uyan tipler üretir. Computed property’ler durum değil türev oldukları için atlanır. Kodda söz dizimi hataları varsa önce bariz olanları düzeltin — parser hoşgörülüdür ama medyum değildir.
İşinize yarayabilecek diğer araçlar
Swift’ten XML’e, yapbozun yalnızca bir parçası. Bunlar onunla iyi gider: