Convertisseur JavaScript vers XML
Colle un objet, une classe ou une instance JavaScript. Récupère du XML propre.
Ce que fait cet outil
Si tu as déjà eu à bricoler à la main un payload XML pour matcher un objet JavaScript — pour un service SOAP, un flux RSS, un sitemap ou une fixture de test —, tu connais la douleur. XMLSerializer exige un DOM, DOMParser va dans le sens inverse, et construire les éléments à la main veut dire que tu oublies un enfant les trois premières fois. Colle le JS ici et récupère du XML bien formé d'un coup. Ça marche pour un simple objet, une classe ES6 plus une instance new, ou n'importe quoi de profondément imbriqué.
L'outil comprend comment les valeurs JS se mappent vers XML. Les nombres et booléens sortent sous forme de string. Les objets Date ressortent en ISO-8601. BigInt est émis comme string décimale (sans le suffixe n). Les champs null et undefined deviennent des éléments vides au lieu d'être supprimés, donc la forme du résultat reste stable. Les tableaux deviennent des éléments conteneur avec un enfant par item, nommés d'après la clé parente au singulier — un tableau items dans Order devient <items><item>...</item></items>, sauf si le tableau contient des instances de classe typées, auquel cas c'est le nom de la classe qui est utilisé.
Les définitions de classe sont gérées aussi. Un class Order { constructor(...) { this.x = ...; } } plus const order = new Order(...) te donne une racine <Order> avec toutes les propriétés assignées dans le constructeur. Les instances de classe imbriquées s'étalent en éléments imbriqués. Les méthodes, getters, propriétés à clé Symbol et celles qui commencent par # (champs privés) sont ignorées. Si tu colles juste un objet littéral, il est sérialisé directement avec un nom d'élément racine sensé.
Comment s'en servir
Trois étapes. Même fonctionnement que tu colles un petit littéral ou un module entier.
Colle ton JavaScript (ou essaie l'exemple)
Dépose ton JS tel quel dans l'éditeur de gauche. Un objet littéral, une classe ES6 + instance, le retour d'une factory function ou un export de module Node.js — tout passe. Clique sur Load Sample pour voir un exemple réaliste Order / OrderItem / Address.
Laisse les const, let et les import. Pas besoin de les enlever — le parseur sait ignorer la syntaxe d'enrobage et lire les vraies valeurs.
Clique sur Convert
Clique sur le bouton vert Convert. L'outil lit le JS, préserve chaque classe, tableau et objet imbriqué, et émet le XML d'une seule passe. Un court indicateur de chargement s'affiche pendant le traitement.
Copie le XML
Le panneau de droite se remplit de XML bien indenté et bien formé que n'importe quel parseur XML conforme au standard acceptera. Copie-le direct dans ta requête SOAP, ton template RSS ou ta fixture de test.
Quand ça dépanne vraiment
Construire des bodies de requête SOAP
Tu as un objet JS qui reflète une requête SOAP et il te faut le body XML à balancer dans SoapUI, Postman ou un appel <code>fetch</code>. Colle l'objet, copie le XML, suivant.
Générer des flux RSS et Atom
Transforme un objet feed avec title, link et items en un squelette <a href="https://www.w3.org/TR/xml/" target="_blank" rel="noopener">XML</a> bien formé que tu peux envelopper dans l'envelope RSS qui va bien — sans construire les éléments à la main.
Démarrer des fichiers sitemap.xml
Colle un tableau d'objets URL et récupère l'échafaudage nécessaire pour un sitemap <code><urlset></code>. Remplace par le bon namespace et c'est terminé.
Seeder des tests d'intégration
Convertis les objets fixture de ton setup Jest ou Vitest en données XML de seed pour systèmes legacy, mock servers ou n'importe quel consumer qui parle encore XML.
Questions fréquentes
Ça marche avec les objets simples, les classes ES6 et les tableaux ?
Oui, les trois. Un objet littéral se sérialise directement avec ses clés comme noms d'éléments. Une classe ES6 plus une instance new utilise le nom de la classe comme élément racine. Les tableaux deviennent des éléments conteneur avec un enfant par item, nommés soit d'après la classe de l'élément (si ce sont des instances de classe) soit d'après la clé au singulier.
Comment ça gère Date, BigInt et null ?
Les objets Date sortent en strings ISO-8601. BigInt est émis comme string décimale (le suffixe n est jeté). Les propriétés null et undefined deviennent des éléments vides (<field/>) au lieu d'être silencieusement zappées — comme ça un XSD en aval qui attend cet élément valide quand même.
Et les méthodes, getters et champs privés ?
Les méthodes et getters d'une classe sont ignorés — seules les propriétés de données réellement assignées sur l'instance sont sérialisées. Les champs privés déclarés avec #, les propriétés à clé Symbol et celles du prototype (pas de l'instance) sont aussi ignorés. Ça correspond à ce que JSON.stringify ferait.
Je peux coller juste un objet littéral sans classe ?
Oui. Un simple const data = { ... } passe sans souci — le nom de la variable extérieure sert d'élément racine, ou un <root> générique s'il n'y a pas de binding. Les objets et tableaux imbriqués à l'intérieur s'étalent en éléments imbriqués de la même manière.
Ça échappe bien les caractères spéciaux comme &, < et > ?
Oui. Le contenu texte contenant &, <, >, " ou ' est échappé vers les entités XML correspondantes, donc la sortie reparse toujours proprement. Les caractères Unicode sont gardés tels quels et la sortie est en UTF-8.
Mon code est stocké quelque part ?
Ton code est envoyé au backend pour la conversion et n'est pas persisté — on ne logge pas le payload. Comme toujours avec un outil en ligne, si le code est vraiment sensible, relis-le avant de coller.
Autres outils qui peuvent servir
JavaScript vers XML n'est qu'une pièce du puzzle. Voici les outils qui vont bien avec :