Pega JavaScript a la izquierda y pulsa "Convert" — lo convertimos en XMLPega código JavaScript

Qué hace esta herramienta

Si alguna vez has tenido que armar a mano un payload XML para que encaje con un objeto de JavaScript —para un servicio SOAP, un feed RSS, un sitemap o un fixture de test—, ya conoces el dolor. XMLSerializer necesita un DOM, DOMParser va en la dirección contraria, y montar elementos a mano significa olvidarte de un hijo las tres primeras veces. Pega aquí el JS y recibe XML bien formado de una pasada. Funciona con un objeto literal, una clase ES6 junto con una instancia new, o cualquier cosa muy anidada.

Sabe cómo se mapean los valores de JS a XML. Números y booleanos salen como su forma en string. Los objetos Date se emiten como ISO-8601. BigInt se emite como su string decimal (sin el sufijo n). Los campos null y undefined salen como elementos vacíos en vez de descartarse, así la forma de la salida se mantiene estable. Los arrays se convierten en elementos contenedor con un hijo por item, con el nombre de la clave padre en singular — un array items en Order se convierte en <items><item>...</item></items>, salvo que el array contenga instancias de clase tipadas, en cuyo caso se usa el nombre de la clase.

Las definiciones de clase también se manejan. Un class Order { constructor(...) { this.x = ...; } } más const order = new Order(...) te da una raíz <Order> con todas las propiedades que se asignaron en el constructor. Las instancias de clase anidadas se expanden como elementos anidados. Los métodos, los getters, las propiedades con clave de Symbol y las que empiezan por # (campos privados) se omiten. Si pegas solo un objeto literal, se serializa directamente con un nombre de elemento raíz sensato.

Cómo usarlo

Tres pasos. Funciona igual si pegas un literal corto o un módulo entero.

1

Pega tu JavaScript (o prueba el ejemplo)

Suelta el JS en el editor de la izquierda tal cual. Un objeto literal, una clase ES6 + instancia, el return de una factory function o un export de módulo de Node.js — todo vale. Pulsa Load Sample para ver un ejemplo realista con Order / OrderItem / Address.

Deja dentro los const, let y sentencias import. No hace falta que los quites — el parser sabe ignorar la sintaxis envolvente y leer los valores reales.

2

Pulsa Convert

Haz clic en el botón verde Convert. La herramienta lee el JS, conserva cada clase, array y objeto anidado, y emite el XML de una pasada. Mientras se procesa verás un indicador breve.

3

Copia el XML

El panel de la derecha se llena con XML indentado y bien formado que cualquier parser XML conforme al estándar aceptará. Cópialo directo a tu request SOAP, plantilla RSS o fixture de test.

Cuándo te saca de un apuro

Montar cuerpos de request SOAP

Tienes un objeto JS que refleja una request SOAP y necesitas el body XML para meterlo en SoapUI, Postman o una llamada <code>fetch</code>. Pegas el objeto, copias el XML, a otra cosa.

Generar feeds RSS y Atom

Convierte un objeto feed con title, link e items en un esqueleto <a href="https://www.w3.org/TR/xml/" target="_blank" rel="noopener">XML</a> bien formado que puedes envolver en el envelope RSS adecuado — sin montar elementos a mano.

Arrancar ficheros sitemap.xml

Pega un array de objetos URL y recibe el andamiaje que necesitas para un sitemap <code>&lt;urlset&gt;</code>. Cambias el namespace correcto y listo.

Sembrar tests de integración

Convierte los objetos fixture del setup de Jest o Vitest en datos XML de seed para sistemas legacy, mock servers o cualquier consumidor que aún hable XML.

Preguntas habituales

¿Funciona con objetos planos, clases ES6 y arrays?

Sí, los tres. Un objeto literal se serializa directamente usando sus claves como nombres de elemento. Una clase ES6 más una instancia new usa el nombre de la clase como elemento raíz. Los arrays se vuelven elementos contenedor con un hijo por item, con el nombre de la clase del elemento (si los items son instancias) o de la clave en singular.

¿Cómo maneja Date, BigInt y null?

Los objetos Date salen como strings ISO-8601. BigInt se emite como su string decimal (el sufijo n se descarta). Las propiedades null y undefined pasan a elementos vacíos (<field/>) en vez de omitirse en silencio, así un XSD aguas abajo que espere ese elemento sigue validando.

¿Qué pasa con métodos, getters y campos privados?

Los métodos y getters de una clase se saltan — solo se serializan las propiedades de datos que realmente se asignaron en la instancia. Los campos privados declarados con #, las propiedades con clave de Symbol y las del prototipo (no de la instancia) también se omiten. Es lo mismo que haría JSON.stringify.

¿Puedo pegar solo un objeto literal, sin clase?

Sí. Un const data = { ... } pelado funciona sin problema — el nombre de la variable exterior se usa como elemento raíz, o un <root> genérico si no hay binding. Los objetos y arrays anidados dentro se expanden como elementos anidados de la misma forma.

¿Escapa caracteres especiales como &amp;, &lt; y &gt;?

Sí. El contenido de texto con &, <, >, " o ' se escapa a las entidades XML correspondientes para que la salida siempre vuelva a parsear limpio. Los caracteres Unicode se mantienen tal cual y la salida es UTF-8.

¿Se guarda mi código?

Tu código se envía al backend para la conversión y no se persiste — no logueamos el payload. Como siempre con herramientas online, si el código es realmente sensible, dale un repaso antes de pegarlo.

Otras herramientas que te pueden hacer falta

JavaScript a XML es solo una pieza del puzzle. Estas combinan bien: