Wklej JavaScript po lewej i kliknij "Convert" — zamienimy to na XMLWklej kod JavaScript

Co robi to narzędzie

Jeżeli kiedykolwiek musiałeś ręcznie sklecić payload XML pasujący do obiektu JavaScript — pod serwis SOAP, feed RSS, sitemapę albo test fixture — znasz ten ból. XMLSerializer wymaga DOM-u, DOMParser leci w drugą stronę, a budowanie elementów ręcznie to trzy pierwsze razy zapomniany child. Wklej JS tutaj i dostaniesz poprawny XML za jednym zamachem. Działa z plain objectem, klasą ES6 i instancją new, albo czymkolwiek zagnieżdżonym głęboko.

Rozumie, jak wartości JS naprawdę mapują się na XML. Liczby i booleany wychodzą jako string. Obiekty Date lecą w ISO-8601. BigInt jest emitowany jako jego string dziesiętny (bez sufiksu n). Pola null i undefined zamieniają się w puste elementy zamiast lecieć w niebyt, dzięki czemu kształt outputu jest stabilny. Tablice zamieniają się w elementy kontenerowe z jednym dzieckiem na item, nazwane jak klucz nadrzędny w liczbie pojedynczej — tablica items w Order staje się <items><item>...</item></items>, chyba że tablica trzyma typowane instancje klas — wtedy używana jest nazwa klasy.

Definicje klas też są obsługiwane. class Order { constructor(...) { this.x = ...; } } plus const order = new Order(...) daje ci element główny <Order> z każdą właściwością, która została przypisana w konstruktorze. Zagnieżdżone instancje klas rozwijają się do zagnieżdżonych elementów. Metody, gettery, właściwości z kluczem Symbol i te zaczynające się od # (pola prywatne) są pomijane. Jeżeli wkleisz sam plain object literal, serializuje się bezpośrednio z sensowną nazwą elementu głównego.

Jak tego użyć

Trzy kroki. Działa tak samo, czy wklejasz krótki literal, czy cały moduł.

1

Wklej swój JavaScript (albo odpal sample)

Rzuć swój JS w lewy edytor w takiej postaci, w jakiej jest. Plain object literal, klasa ES6 + instancja, return z factory function albo export modułu Node.js — wszystko wchodzi. Kliknij Load Sample, żeby zobaczyć realistyczny przykład Order / OrderItem / Address.

Zostaw const, let i instrukcje import. Nie musisz ich obcinać — parser wie, że ma zignorować opakowującą składnię i odczytać rzeczywiste wartości.

2

Kliknij Convert

Naciśnij zielony przycisk Convert. Narzędzie czyta JS, zachowuje każdą klasę, tablicę i zagnieżdżony obiekt, i emituje XML w jednym przebiegu. Podczas działania widać krótki loader.

3

Skopiuj XML

Prawy panel wypełnia się wyindentowanym, poprawnie sformowanym XML-em, który przyjmie każdy zgodny ze standardem parser XML. Kopiuj prosto do swojego requestu SOAP, szablonu RSS albo fixture testowego.

Kiedy się to naprawdę przydaje

Składanie bodies requestów SOAP

Masz plain JS obiekt, który odwzorowuje request SOAP, i potrzebujesz body XML do wrzucenia w SoapUI, Postmana albo wywołania <code>fetch</code>. Wklej obiekt, skopiuj XML, jedziesz dalej.

Generowanie feedów RSS i Atom

Zamień obiekt feed z title, link i items w well-formed szkielet <a href="https://www.w3.org/TR/xml/" target="_blank" rel="noopener">XML</a>, który opakujesz we właściwą kopertę RSS — bez ręcznego składania elementów.

Startowanie plików sitemap.xml

Wklej tablicę obiektów URL i weź rusztowanie, którego potrzebujesz pod sitemapę <code>&lt;urlset&gt;</code>. Podmień namespace na właściwy i gotowe.

Seed dla testów integracyjnych

Przekonwertuj obiekty fixture z setupu Jesta albo Vitesta na dane XML seed dla legacy systemów, mock serverów, albo dowolnego konsumenta, który nadal mówi XML-em.

Częste pytania

Działa z plain objectami, klasami ES6 i tablicami?

Tak, z wszystkimi trzema. Plain object literal serializuje się bezpośrednio — klucze stają się nazwami elementów. Klasa ES6 plus instancja new używa nazwy klasy jako elementu głównego. Tablice zamieniają się w elementy kontenerowe z jednym dzieckiem na item, nazwane albo po klasie elementu (jeśli itemy to instancje klas), albo po kluczu w liczbie pojedynczej.

Jak radzi sobie z Date, BigInt i null?

Obiekty Date wychodzą jako stringi ISO-8601. BigInt jest emitowany jako jego string dziesiętny (sufiks n odpada). Właściwości null i undefined stają się pustymi elementami (<field/>) zamiast być po cichu pomijane, więc XSD dalej w pipeline, który oczekuje tego elementu, nadal przejdzie walidację.

A co z metodami, getterami i polami prywatnymi?

Metody i gettery na klasie są pomijane — serializowane są tylko data properties, które faktycznie zostały przypisane na instancji. Pola prywatne zadeklarowane z #, właściwości z kluczem Symbol i właściwości na prototypie (nie na instancji) są również pomijane. Identycznie jak zrobiłby to JSON.stringify.

Mogę wkleić sam object literal, bez klasy?

Tak. Zwykły const data = { ... } działa bez problemu — nazwa zewnętrznej zmiennej służy jako element główny, albo generyczny <root>, jeśli nie ma bindinga. Zagnieżdżone obiekty i tablice w środku rozwijają się tak samo do zagnieżdżonych elementów.

Czy escape'uje znaki specjalne jak &amp;, &lt; i &gt;?

Tak. Tekst zawierający &, <, >, " albo ' jest escape'owany do odpowiednich encji XML, więc output zawsze parsuje się z powrotem czysto. Znaki Unicode lecą bez zmian, output jest w UTF-8.

Czy mój kod jest gdzieś zapisywany?

Twój kod leci do backendu po to, żeby go przekonwertować, i nie jest persystowany — nie logujemy payloadu. Jak zawsze z narzędziami online, jeśli kod jest naprawdę wrażliwy, rzuć okiem przed wklejeniem.

Inne narzędzia, które możesz potrzebować

JavaScript do XML to tylko jeden element układanki. Oto narzędzia, które dobrze z nim grają: