Python'dan XML'e Dönüştürücü
Python sınıfı, dict veya dataclass yapıştırın. Temiz XML geri alın.
Bu araç ne yapar
Bir SOAP endpoint’i, bir config dosyası, bir legacy entegrasyon veya bir test fixture’ı için Python sınıfını yansıtan bir XML payload’unu elle kurmak zorunda kaldıysanız, süreci iyi bilirsiniz: xml.etree.ElementTree ile bir saat boğuştuktan sonra iç içe bir alanı unuttuğunuzu fark edersiniz. Bunun yerine Python’ı buraya yapıştırın; tek seferde düzgün biçimli XML geri alın. Düz bir dict, bir dataclass, bir Pydantic modeli veya derin iç içe bir şey — sonuç aynıdır.
Bu salt string-replace değil. Dönüştürücü Python değerlerinin XML’e gerçekten nasıl eşlendiğini anlar: Decimal("49.99") düz sayı metnine dönüşür, datetime ve date ISO-8601 string’i olarak çıkar, UUID standart 8-4-4-4-12 hex string’i olur, None değerli Optional[...] alanları atılmak yerine boş element olur ve list[T] veya List[T] her öğe için bir çocuğu olan, öğe tipinin adıyla etiketlenmiş konteyner elementlerine dönüşür — xmltodict veya lxml gibi kütüphanelerin üreteceği formatın aynısı.
Type hint’lere de saygı gösterilir. @dataclass alan adları element adı olur. Pydantic modellerindeki Field(alias="x") elementi yeniden adlandırır. Bir dataclass üzerinde field(metadata={"xml": "attribute"}) değeri çocuk element yerine bir attribute’a iter. _ ile başlayan özel alanlar atılır. Birden fazla sınıf yapıştırırsanız her biri, iç içe tipler açılmış ve miras alınmış attribute’lar dahil edilmiş şekilde çıktıya düşer. Hiçbir şey sessizce yutulmaz — alan oradaysa XML’de görünür.
Nasıl kullanılır
Üç adım. Beş satırlık bir dict yapıştırsanız da koca bir models.py yapıştırsanız da aynı şekilde çalışır.
Python’ınızı yapıştırın (veya örneği deneyin)
Python’ı olduğu gibi sol editöre atın. Dict literal, dataclass, Pydantic BaseModel, iç içe sınıflar veya instance ataması — hepsi olur. Önce gerçekçi bir Order / OrderItem / Address örneği görmek isterseniz Load Sample’a basın.
Import’ları, decorator’ları ve type hint’leri silmenize gerek yok. Parser typing anotasyonlarını okur ve çıktı tiplerini ona göre belirler.
Dönüştür’e basın
Yeşil Convert butonuna tıklayın. Araç Python’ı okur, her sınıf ve attribute’u korur ve XML’i tek seferde üretir. Çalışırken kısa bir yükleme göstergesi belirir.
XML’i kopyalayın
Sağdaki panel girintili ve düzgün biçimli XML’le dolar; standartlara uyan herhangi bir XML parser bunu sorunsuz kabul eder. SOAP isteğinize, config dosyanıza, test fixture’ınıza veya dokümanınıza doğrudan yapıştırın.
Bu gerçekten ne zaman işe yarar
SOAP / legacy entegrasyon fixture’ları
Pydantic request modeliniz var ve legacy bir SOAP servisine göndermek için bir XML body’ye ihtiyacınız var. Modeli yapıştırın, XML’i alın, test runner’ınıza yapıştırın — bitti.
Dataclass’ları config’e çevirmek
30 alanlı bir Settings dataclass’ı, herhangi bir XML tabanlı ayar deposu için düzenlenmeye hazır bir XML config şablonuna dönüşür — elle yazılmış iskele yok, yazım hatası yok.
XSD dokümanlarını gerçeğe uygun tutmak
README’niz, API referansınız veya XSD destekli şema dokümanlarınız için XML örneklerini doğrudan kodunuzdaki gerçek modellerden üretin; böylece örnekler asla gerçeklikten sapmaz.
Entegrasyon testlerine veri beslemek
Pytest fixture’larınızdaki instance literal’lerini hâlâ XML konuşan sistemler — legacy API’ler, mock sunucular veya XSLT pipeline’ları — için XML seed dosyalarına çevirin.
Sık sorulan sorular
Dataclass, Pydantic ve düz dict’lerle çalışıyor mu?
Evet, üçüyle de. @dataclass ve Pydantic BaseModel alan adları element adı olarak kullanılır. Düz dict literal’leri de çalışır — key’ler element adı olur, değerler tipe göre üretilir. İç içe modeller veya dict’ler iç içe elementler olarak açılır.
Decimal, datetime ve UUID nasıl ele alınıyor?
Decimal("49.99") element metni olarak 49.99 olur. datetime, date ve time ISO-8601 string’leri olarak çıkar. UUID standart 8-4-4-4-12 hex string’e dönüşür. Enum alt sınıfları .value’sunu verir. set’ler tıpkı list’ler gibi konteyner elementi olur.
Peki Optional[...] ve None değerleri?
None değerli alanlar atılmak yerine boş element olarak (<field/>) yazılır — çıktının şekli tutarlı kalır, bu da aşağı akıştaki bir XSD elementin var olmasını istediğinde işe yarar.
Element’leri yeniden adlandırabilir veya alanları attribute’a itebilir miyim?
Evet. Pydantic modellerinde Field(alias="x") elementi yeniden adlandırır. Dataclass’larda field(metadata={"xml": "attribute"}) alanı parent’ın bir attribute’una iter, metadata={"xml": "name", ...} ise onu yeniden adlandırır. Alt çizgiyle başlayan özel alanlar (_cache, _tmp) varsayılan olarak atılır.
Birden fazla sınıfı bir anda yapıştırabilir miyim?
Evet — koca bir models.py yapıştırın. Her üst seviye sınıf, iç içe tipler açılmış ve ana sınıflardan miras alınan alanlar dahil edilmiş şekilde çıkar. Ayrıca bir instance ataması da eklerseniz, serialize edilen o instance olur; değilse default’ları çözümlenebilen ilk sınıf kullanılır.
Kodum bir yerde saklanıyor mu?
Kod yalnızca dönüştürülmek üzere backend’e gönderiliyor ve kalıcı olarak tutulmuyor — payload’u loglamıyoruz. Her online araçta olduğu gibi, yapıştırdığınız şey gerçekten hassassa önce bir göz gezdirin.
İhtiyacınız olabilecek diğer araçlar
Python’dan XML’e bulmacanın bir parçası. Yanında iyi giden araçlar şunlar: