Konwerter Kotlin do XML
Wklej data class lub instancję Kotlina. Odbierz czysty XML.
Co robi to narzędzie
Jeśli kiedykolwiek musiałeś ręcznie spisać XML-owy payload dla data class w Kotlinie — na potrzeby pliku zasobów Androida, endpointu SOAP, który wciąż nie doczekał się wymiany, albo fixture'a do testu integracyjnego — wiesz, jak męczące jest to pisanie. Wklej tu Kotlina, a w jednym przebiegu dostaniesz poprawnie sformowany XML. Pojedyncza data class, plik z kilkoma data class i sealed class, albo uzupełniona instancja val order = Order(...) — efekt ten sam: kompletny dokument XML z zachowaną każdą właściwością.
To nie jest głupia podmiana stringów. Konwerter wie, jak Kotlin faktycznie serializuje do XML — mniej więcej tak, jak robi to kotlinx.serialization. Wartości BigDecimal wychodzą jako zwykły tekst liczbowy, Instant i LocalDateTime stają się stringami ISO-8601, nullable z wartością null stają się pustymi elementami, a List<T> i Map<K,V> mają spójną formę kontenera — każda lista staje się elementem-wrapperem z jednym dzieckiem na pozycję, nazwanym jak typ elementu.
Adnotacje serializacyjne też są respektowane. @SerialName("x") na właściwości zmienia nazwę elementu w wyjściu, @Transient pomija właściwość, a @SerialName("x") na poziomie klasy zmienia nazwę elementu-opakowania. Hierarchie sealed class są spłaszczane z dyskryminatorem typu, więc możesz później wykonać round-trip. Jak wkleisz kilka data class, każda wyląduje w wyjściu z rozwiniętymi typami zagnieżdżonymi i wypełnionymi wartościami domyślnymi. Jeśli chcesz pogłębioną wersję, warto zajrzeć do dokumentacji serializacji Kotlina.
Jak tego użyć
Trzy kroki. Działa tak samo, czy wklejasz pięć linii, czy cały plik modelu.
Wklej swojego Kotlina (albo wypróbuj przykład)
Wrzuć Kotlina do lewego edytora tak jak jest. Data class, hierarchia sealed class, uzupełniona instancja val albo plik z kilkoma klasami — wszystko ok. Kliknij Wczytaj przykład, jeśli chcesz najpierw zobaczyć realistyczny przypadek.
Nie musisz usuwać import-ów, kasować adnotacji ani porządkować składni Kotlina. Zostaw kod w takiej formie, w jakiej wygląda w IDE. Po prostu wklej.
Kliknij Konwertuj
Wciśnij zielony przycisk Konwertuj. Narzędzie czyta Kotlina, zachowuje każdą klasę i właściwość, i buduje XML w jednym przebiegu. Podczas pracy pojawia się krótki wskaźnik ładowania.
Skopiuj XML
Prawy panel wypełnia się wciętym, poprawnie sformowanym XML-em, który zaakceptuje każdy zgodny ze standardem parser XML. Skopiuj go prosto do zasobu Androida, żądania SOAP, pliku konfiguracyjnego albo fixture'a testowego.
Kiedy naprawdę się przydaje
XML layoutów i zasobów Androida
Masz model Kotlina, który mapuje się na <a href="https://developer.android.com/guide/topics/resources/providing-resources" target="_blank" rel="noopener">zasób XML Androida</a> — ekran preferencji, string-array, własny zestaw atrybutów. Wklej klasę, weź XML, wklej do res/xml albo res/values.
Klienci SOAP na JVM
Typ żądania w Kotlinie musi opuścić aplikację jako SOAP. Wklej data class, wrzuć ciało XML do SoapUI albo Postmana, zweryfikuj kontrakt bez pisania koperty ręcznie.
Dane testowe dla fixture'ów
Zamień uzupełnioną instancję <code>val order = Order(...)</code> z testu jednostkowego na plik XML-ową pod testy integracyjne, mock serwery albo starsze systemy, które dalej mówią w XML.
Dokumentacja zgodna z kodem
Generuj przykłady XML do README, referencji API albo dokumentów schematu opartego na XSD prosto z faktycznych modeli Kotlina, dzięki czemu dokumentacja trzyma się kodu zamiast dryfować.
Częste pytania
Czy mogę wkleić kilka data class naraz?
Tak — wklej cały plik. Każda data class lub sealed class z najwyższego poziomu przechodzi z rozwiniętymi typami zagnieżdżonymi i wypełnionymi wartościami domyślnymi. Nic nie znika po cichu.
Czy respektuje @SerialName i @Transient?
Tak. @SerialName("x") na właściwości zmienia nazwę elementu w wyjściu, @SerialName("x") na klasie zmienia nazwę elementu-opakowania, a @Transient usuwa właściwość w całości. Takie zachowanie dostajesz z kotlinx.serialization.
Jak obsługuje BigDecimal, Instant i nullable?
BigDecimal wychodzi jako zwykły tekst liczbowy (bez wrappera BigDecimal("...")). Instant i LocalDateTime stają się stringami ISO-8601. Nullable z wartością null stają się pustymi elementami zamiast znikać, żeby forma była spójna dla konsumentów walidujących po XSD.
A sealed class, listy i mapy?
Hierarchie sealed class są spłaszczane atrybutem dyskryminatora typu, żebyś mógł zrobić round-trip. List<T> staje się elementem-kontenerem z jednym dzieckiem na pozycję, nazwanym jak typ elementu — List<OrderItem> items zamienia się w <items><OrderItem/><OrderItem/></items>. Map<K,V> staje się kontenerem <Entry><Key/><Value/></Entry>.
Czy mój kod jest zapisywany?
Twój kod jest wysyłany do backendu na potrzeby konwersji i nie jest przechowywany — nie logujemy payloadu. Jak zawsze przy narzędziach online: jeśli kod jest naprawdę wrażliwy, przejrzyj go przed wklejeniem.
A jeśli Kotlin ma coś nietypowego — companion objects, funkcje rozszerzeń, korutyny?
Companion objects są ignorowane dla wyjścia XML, bo nie są częścią stanu instancji. Funkcje rozszerzeń i funkcje top-level są pomijane. Jeśli sam kod ma błędy składniowe, popraw najpierw te oczywiste — parser jest wyrozumiały, ale nie czyta w myślach.
Inne narzędzia, które mogą się przydać
Kotlin do XML to jeden element układanki. Te dobrze się z nim dogadują: