Wklej Perla po lewej i kliknij "Konwertuj" — zamienimy to w XMLWklej kod Perla

Co robi to narzędzie

Jeśli utrzymujesz Perla, który gdzieś wypycha XML — stary serwis SOAP, konfigurację opartą o XML, integrację napędzaną przez CPAN — znasz rytuał: use XML::Simple, mocowanie z ForceArray i KeyAttr, ręczne składanie referencji do hasha i modlitwa, żeby wyjście było takie, jakiego oczekuje odbiorca. Wklej Perla tu i odbierz poprawny XML za jednym zamachem — blessed obiekt, zwykłą referencję do hasha albo cały pakiet z konstruktorem i accessorami.

Konwerter czyta typowe wzorce OO Perla czysto. Konstruktor robiący bless $self, $class z referencją do hasha staje się elementem XML, którego dzieci odzwierciedlają klucze hasha. Referencje do tablic stają się elementami-kontenerami z jednym dzieckiem na wpis (tag dziecka to domyślnie forma pojedyncza klucza, więc items => [...] daje <items><item/>...</items>). Zagnieżdżone referencje do hashy stają się zagnieżdżonymi elementami. undef staje się pustym elementem zamiast zostać pominięte, żeby kształt pasował do tego, co XML::Simple albo XML::LibXML dałyby w round-tripie.

Możesz wkleić kilka bloków package naraz — package Order; package OrderItem; package Address; — i każdy wychodzi z polami ustawionymi przez konstruktor rozwiniętymi. Płaskie, nie-OO struktury danych też działają: podaj my $data = { ... };, a narzędzie przejdzie po referencjach, zachowując klucze hasha jako nazwy elementów. Po głębsze reguły Perla stojące za tym wszystkim sięgnij do oficjalnego perldoc — to referencja.

Jak tego użyć

Trzy kroki. Działa tak samo, czy wklejasz dziesięciolinijkowy pakiet, czy cały moduł z helperami.

1

Wklej swojego Perla (albo załaduj przykład)

Wrzuć kod do edytora po lewej tak jak leży. Package z konstruktorem, zwykła referencja do hasha, zagnieżdżone pakiety albo miks — wszystko gra. Naciśnij Załaduj przykład, żeby najpierw zobaczyć realistyczny przypadek.

Nie musisz usuwać use strict;, use warnings; ani swojej listy require. Zostaw kod tak jak wygląda u ciebie w edytorze. Po prostu wklej.

2

Kliknij Konwertuj

Kliknij zielony przycisk Konwertuj. Narzędzie czyta deklaracje pakietów, rozwiązuje blessed referencje i buduje XML w jednym przebiegu. W tym czasie kręci się krótki wskaźnik ładowania.

3

Skopiuj XML

Prawy panel wypełnia się wciętym, poprawnym XML-em, który zaakceptuje każdy parser zgodny ze standardem. Skopiuj go prosto do swojego workflowu CPAN, starej integracji SOAP, pliku konfiguracyjnego w XML-u albo fixture’a testowego.

Kiedy naprawdę się to przydaje

Karmienie XML::LibXML lub XML::Simple

Masz strukturę danych w Perlu i chcesz zobaczyć dokładnie, jak wygląda jako XML, zanim podepniesz <code>XMLout</code> / <code>XML::LibXML::Document</code>. Wklej, konwertuj, kopiuj, porównaj.

Integracja z systemami legacy

Integracja oparta o CPAN wciąż oczekuje SOAP 1.1 albo własnego formatu XML. Wklej swoją reprezentację Perla i zyskaj realistyczne ciało, które podasz do SoapUI albo curla.

Odchodzenie od Perla

Wymieniasz stary serwis w Perlu na coś innego? Najpierw wyeksportuj kształt danych jako XML — to neutralny grunt do przeniesienia na Pythona, Javę albo C#.

Dokumentacja zgodna z kodem

Generuj przykłady XML do README modułu na <a href="https://metacpan.org/" target="_blank" rel="noopener">MetaCPAN</a> albo do wewnętrznego wiki wprost ze swoich prawdziwych pakietów, żeby dokumentacja nie rozjechała się z kodem.

Częste pytania

Czy mogę wkleić kilka pakietów naraz?

Tak — wklej cały plik .pm albo kilka bloków package ułożonych jeden po drugim. Każdy pakiet wychodzi z rozwiniętymi kluczami hasha przypisanymi przez konstruktor i rozwiązanymi zagnieżdżonymi referencjami do obiektów. Jeśli Order trzyma referencję do tablicy obiektów OrderItem i referencję do hasha shipping_address, wszystkie trzy lądują w wyjściu.

Jak radzi sobie z undef i brakującymi kluczami?

Klucz z wartością undef staje się pustym elementem, żeby kształt XML-a był stabilny między instancjami. Klucze, których w haszu w ogóle nie ma, są pomijane. Referencje do pustych tablic stają się pustymi elementami-kontenerami (<items></items>) zamiast zostać wyrzucone.

Czy referencje do tablic i hashy działają tak samo?

Referencja do tablicy staje się elementem-kontenerem z jednym dzieckiem na wpis — domyślnie tag dziecka to forma pojedyncza klucza (więc items => [...] daje <items><item/>...</items>). Referencja do hasha staje się zagnieżdżonym elementem, którego dzieci odzwierciedlają klucze. Mieszane referencje (tablica referencji do hashy, hasz tablic) zagnieżdżają się tak samo rekurencyjnie.

A co z blessed referencjami i wielokrotnym dziedziczeniem?

Blessed referencje zachowują dostępną nazwę klasy — może posłużyć jako tag elementu, gdy ma to sens. Przy wielokrotnym dziedziczeniu przez @ISA albo role Moose/Moo wychodzą atrybuty finalnego złożonego obiektu; nie próbujemy odtwarzać grafu dziedziczenia w XML-u.

Czy mój kod jest przechowywany?

Kod trafia na backend w celu konwersji i nie jest trwale zapisywany — nie logujemy payloadu. Jeśli Perl jest wrażliwy (dane logowania w literałach, wewnętrzne URL-e), rzuć na niego okiem przed wklejeniem, jak przy każdym narzędziu online.

A jeśli Perl używa referencji do subroutyn albo tie?

Referencje do kodu i zmienne tied wychodzą jako puste elementy, zamiast wywalać całą konwersję. Część danych twojej struktury i tak przechodzi. Jeśli sam kod ma błędy składniowe, napraw najpierw te oczywiste, żeby parser miał coś czystego, na czym może pracować.

Inne narzędzia, które mogą się przydać

Perl do XML to jeden z elementów układanki. Te narzędzia dobrze z nim idą: