Perl’den XML’e Dönüştürücü
Perl paketlerini veya veri yapılarını yapıştır. Temiz XML geri al.
Bu araç ne yapar
Bir yere XML besleyen Perl bakımı yapıyorsan — eski bir SOAP servisi, XML tabanlı bir config, CPAN odaklı bir entegrasyon — ayini bilirsin: use XML::Simple, ForceArray ve KeyAttr ile uğraş, elle bir hash referansı kur ve çıktının tüketicinin beklediğiyle örtüşmesini um. Perl’i buraya yapıştır; tek seferde iyi biçimli XML al — ister blessed bir nesne, ister düz bir hash referansı, ister constructor ve accessor’ları olan komple bir paket olsun.
Dönüştürücü, Perl’in yaygın OO kalıplarını temiz okur. Bir hash referansıyla bless $self, $class yapan bir constructor, çocukları hash anahtarlarını yansıtan bir XML öğesine dönüşür. Array referansları, her giriş için bir çocuk içeren konteyner öğelerine dönüşür (çocuk etiketi varsayılan olarak anahtarın tekil biçimidir, yani items => [...], <items><item/>...</items> olur). İç içe hash referansları iç içe öğelere dönüşür. undef atılmak yerine boş bir öğeye dönüşür; böylece şekil, XML::Simple veya XML::LibXML’nin round-trip’inde verdiğiyle aynı olur.
Birden fazla package bloğunu aynı anda yapıştırabilirsin — package Order; package OrderItem; package Address; gibi — ve her biri constructor tarafından atanmış alanları açılmış hâlde gelir. OO olmayan düz veri yapıları da çalışır: my $data = { ... }; ver, araç referansları dolaşır ve hash anahtarlarını öğe adı olarak korur. Bunların arkasındaki daha derin Perl kuralları için resmi perldoc referanstır.
Nasıl kullanılır
Üç adım. On satırlık bir paket yapıştırsan da, helper’larla birlikte komple bir modül yapıştırsan da aynı şekilde işler.
Perl’ini yapıştır (ya da örneği yükle)
Kodu soldaki editöre olduğu gibi bırak. Constructor’lı bir package, düz bir hash referansı, iç içe paketler ya da bir karışım — hepsi uyar. Önce gerçekçi bir örnek görmek için Örneği Yükle’ye bas.
use strict;, use warnings; veya require listeni çıkarmana gerek yok. Kodu editöründe göründüğü hâliyle bırak. Sadece yapıştır.
Dönüştür’e bas
Yeşil Dönüştür butonuna tıkla. Araç paket bildirimlerini okur, blessed referansları çözer ve XML’i tek seferde kurar. Çalışırken kısa bir yüklenme göstergesi döner.
XML’i kopyala
Sağdaki panel, standarda uyumlu her parser’ın kabul edeceği girintilenmiş, iyi biçimli XML’le dolar. Doğrudan CPAN akışına, eski bir SOAP entegrasyonuna, XML tabanlı bir config dosyasına ya da bir test fixture’ına yapıştır.
Bu gerçekten ne zaman işe yarar
XML::LibXML veya XML::Simple’a verme öncesi
Bir Perl veri yapın var ve <code>XMLout</code> / <code>XML::LibXML::Document</code>’ı bağlamadan önce XML hâlinin tam olarak nasıl göründüğünü görmek istiyorsun. Yapıştır, dönüştür, kopyala, karşılaştır.
Eski sistem entegrasyonu
CPAN tabanlı bir entegrasyon hâlâ SOAP 1.1 ya da özel bir XML formatı bekliyor. Perl temsilini yapıştır; SoapUI ya da curl’e verecek gerçekçi bir gövde al.
Perl’den ayrılma
Eski bir Perl servisini başka bir şeyle değiştiriyor musun? Önce veri şeklini XML olarak dışa aktar — Python’a, Java’ya ya da C#’a taşımak için nötr zemindir.
Kodla uyumlu dokümanlar
Bir <a href="https://metacpan.org/" target="_blank" rel="noopener">MetaCPAN</a> modülünün README’si veya dahili wiki için XML örneklerini doğrudan gerçek paketlerinden üret; böylece doküman kodla uyumunu kaybetmesin.
Sık sorulan sorular
Aynı anda birden fazla paket yapıştırabilir miyim?
Evet — komple bir .pm dosyasını ya da art arda birkaç package bloğunu yapıştır. Her paket, constructor’ın atadığı hash anahtarları açılmış ve iç içe nesne referansları çözülmüş hâlde çıkar. Order, OrderItem nesnelerinin array referansını ve shipping_address hash referansını tutuyorsa, üçü de çıktıda yer alır.
undef ve eksik anahtarları nasıl ele alır?
Değeri undef olan bir anahtar boş bir öğeye dönüşür; böylece XML’in şekli örnekler arasında sabit kalır. Hash’te tamamen bulunmayan anahtarlar atlanır. Boş diziler içeren array referansları atılmak yerine boş konteyner öğelere (<items></items>) dönüşür.
Array referansları ve hash referansları aynı şekilde mi çalışır?
Bir array referansı, her giriş için bir çocuk içeren konteyner öğeye dönüşür — varsayılan olarak çocuk etiketi anahtarın tekil biçimidir (yani items => [...], <items><item/>...</items> verir). Bir hash referansı, çocukları anahtarları yansıtan iç içe bir öğeye dönüşür. Karışık referanslar (hash referanslarının dizisi, dizilerin hash’i) aynı şekilde özyinelemeli olarak iç içe geçer.
Blessed referanslar ve çoklu kalıtım nasıl?
Blessed referanslar sınıf adını erişilebilir tutar — anlamlı olduğunda öğe etiketi olarak kullanılabilir. @ISA ya da Moose/Moo rolleri üzerinden çoklu kalıtımda, son bileşik nesnenin nitelikleri çıktıya yansır; kalıtım grafiğini XML’de yeniden kurmaya çalışmayız.
Kodum saklanıyor mu?
Kodun dönüşüm için backend’e gönderilir ve kalıcı olarak tutulmaz — payload’ı loglamayız. Perl hassassa (literal’lerdeki kimlik bilgileri, dahili URL’ler), herhangi bir online araçta olduğu gibi yapıştırmadan önce bir gözden geçir.
Perl, subroutine referansı veya tie kullanıyorsa?
Kod referansları ve tied değişkenler, tüm dönüşümü başarısız kılmak yerine boş öğe olarak çıkarılır. Yapının veri kısmı yine geçer. Kodun kendisinde sözdizim hataları varsa, önce bariz olanları düzelt; böylece parser çalışacak temiz bir şey bulur.
İşine yarayabilecek diğer araçlar
Perl’den XML’e, bulmacanın bir parçası. Bu araçlar onun yanına iyi gider: