Kotlin’dan XML’e Dönüştürücü
Kotlin data class’larını veya bir instance’ı yapıştır. Temiz XML geri al.
Bu aracın yaptığı
Bir Kotlin data class’ı için elle XML payload’ı yazmak zorunda kaldıysan — bir Android kaynak dosyası, henüz değiştirilmemiş bir SOAP endpoint’i ya da bir entegrasyon testi için fixture olsun — o tıklatmanın ne kadar sıkıcı olduğunu bilirsin. Kotlin’i buraya yapıştır, tek seferde iyi biçimlenmiş XML al. Tek bir data class, içinde birçok data class ve sealed class olan bir dosya, ya da doldurulmuş bir val order = Order(...) instance’ı — sonuç aynı: her özelliği korunmuş tam bir XML belgesi.
Bu kör bir string-değiştirme değil. Dönüştürücü, Kotlin’in gerçekte XML’e nasıl seriallendiğini biliyor — aşağı yukarı kotlinx.serialization’ın yaptığı şekilde. BigDecimal değerleri düz sayısal metin olarak çıkar, Instant ve LocalDateTime ISO-8601 string’leri olur, null değerli nullable’lar boş elementler olur, List<T> ve Map<K,V> tutarlı bir container biçimini izler — her liste, her mağza bir çocuk içeren ve element tipine göre adlandırılmış bir wrapper element’e dönüşür.
Serialization anotasyonları da dikkate alınır. Bir özellik üzerindeki @SerialName("x") çıktıdaki element’i yeniden adlandırır, @Transient özelliği atar, ve sınıf seviyesindeki bir @SerialName("x") saran kök element’i yeniden adlandırır. Sealed class hiyerarşileri, sonradan round-trip yapabilmen için bir tip ayırt edicisiyle düzleştirilir. Birden fazla data class yapıştırırsan, her biri iç içe tiplerini açarak ve varsayılan değerlerini doldurmuş halde çıktıya düşer. Derinlikli versiyonu istiyorsan Kotlin serialization belgelerini okumaya değer.
Nasıl kullanılır
Üç adım. Beş satır da yapıştırsan, koca bir model dosyası da, aynı şekilde çalışır.
Kotlin’ini yapıştır (ya da örneği dene)
Kotlin’i sol editöre olduğu gibi bırak. Bir data class, bir sealed class hiyerarşisi, doldurulmuş bir val instance’ı ya da birden fazla sınıf içeren bir dosya — hepsi olur. Önce gerçekçi bir örnek görmek istersen Örnek Yükle’ye tıkla.
import satırlarını temizlemeye, anotasyonları silmeye ya da Kotlin sözdizimini düzeltmeye gerek yok. Kodu IDE’de nasıl görünüyorsa o şekilde bırak. Sadece yapıştır.
Dönüştür’e bas
Yeşil Dönüştür düğmesine tıkla. Araç Kotlin’i okur, her sınıfı ve özelliği korur ve XML’i tek seferde kurar. Çalışırken kısa bir yükleme göstergesi görürsün.
XML’i kopyala
Sağdaki panel, standarda uyumlu bir XML parser’ının kabul edeceği girintili, iyi biçimlenmiş XML ile dolar. Doğrudan Android kaynağına, SOAP isteğine, config dosyasına ya da test fixture’ına kopyala.
Gerçekten işe yaradığı yerler
Android layout ve kaynak XML’leri
Bir <a href="https://developer.android.com/guide/topics/resources/providing-resources" target="_blank" rel="noopener">Android XML kaynağı</a>na karşılık gelen bir Kotlin modelin var — bir tercihler ekranı, bir string array, özel bir attribute seti. Sınıfı yapıştır, XML’i al, res/xml veya res/values içine yapıştır.
JVM üzerindeki SOAP istemcileri
Bir Kotlin istek tipi uygulamadan SOAP olarak çıkması gerekiyor. Data class’ı yapıştır, XML gövdesini SoapUI veya Postman’e at, envelope’ı elle yazmadan sözleşmeyi doğrula.
Test fixture’larını beslemek
Unit testinden doldurulmuş bir <code>val order = Order(...)</code> instance’ını, entegrasyon testleri, mock sunucuları ya da hala XML konuşan legacy sistemler için XML seed dosyasına çevir.
Dökümanları senkron tutmak
Bir README, API referansı ya da XSD destekli şema dökümanları için XML örneklerini doğrudan gerçek Kotlin modellerinden üret, böylece belgeler koddan ayrılmak yerine ona uyar.
Sık sorulan sorular
Birden fazla data class’ı aynı anda yapıştırabilir miyim?
Evet — tüm bir dosyayı yapıştır. Her üst düzey data class veya sealed class, iç içe tipleri açılmış ve varsayılan değerleri doldurulmuş halde geçer. Hiçbir şey sessizce atılmaz.
@SerialName ve @Transient’i dikkate alır mı?
Evet. Bir özellik üzerindeki @SerialName("x") çıktıdaki element’i yeniden adlandırır, bir sınıf üzerindeki @SerialName("x") saran kök element’i yeniden adlandırır ve @Transient özelliği tamamen atar. kotlinx.serialization’dan aldığın davranış budur.
BigDecimal, Instant ve nullable’ları nasıl işler?
BigDecimal düz sayısal metin olarak çıkar (BigDecimal("...") sarmalayıcısı yok). Instant ve LocalDateTime ISO-8601 string’leri olur. null değerli nullable’lar atılmak yerine boş element haline gelir, böylece XSD’ye göre doğrulayan tüketiciler için biçim tutarlı kalır.
Peki sealed class’lar, listeler ve map’ler?
Sealed class hiyerarşileri, round-trip yapabilmen için bir tip ayırt edici nitelikle düzleştirilir. List<T>, her öğeye bir çocuk içeren ve element tipine göre adlandırılmış bir container element olur — bir List<OrderItem> items, <items><OrderItem/><OrderItem/></items> olur. Map<K,V>, <Entry><Key/><Value/></Entry> container’ına dönüşür.
Kodum saklanıyor mu?
Kodun dönüştürme için backend’e gönderilir ve saklanmaz — payload’ı loglamıyoruz. Online araçlarda her zaman olduğu gibi, kod gerçekten hassassa yapıştırmadan önce bir göz gezdir.
Ya Kotlin’de tuhaf şeyler varsa — companion object, extension function, coroutine?
Companion object’ler instance durumunun parçası olmadığı için XML çıktısı için göz ardı edilir. Extension function’lar ve top-level fonksiyonlar atlanır. Kodun kendisinde sözdizimi hataları varsa, bariz olanları önce düzelt — parser hoşgörülüdür ama medyum değil.
İhtiyaç duyabileceğin diğer araçlar
Kotlin’den XML’e yapboz’un bir parçası. Bunlar onunla iyi gider: