Qué hace esta herramienta
Cada elemento se convierte en clave; sus hijos, en el valor.
<user id="1"><name>Ada</name></user>
{ "user": { "name": "Ada", "@_id": "1" } }
Tres puntos donde los modelos discrepan
XML y JSON no describen las mismas formas, y todo conversor tiene que elegir. Estas son las elecciones.
Los atributos
Pasan a ser claves con el prefijo @_. JSON tiene una sola clase de miembro; XML tiene atributos y elementos, y pueden compartir nombre: <user id="1"><id>2</id></user> guarda dos cosas distintas llamadas id. El prefijo las separa. Un interruptor descarta los atributos si no los necesitas.
Cuando un elemento lleva texto y atributos a la vez, el texto queda bajo #text.
La repetición
Un <item> da un objeto. Dos dan un array.
<r><i>1</i></r> → { "r": { "i": 1 } }
<r><i>1</i><i>2</i></r> → { "r": { "i": [1, 2] } }
No es un defecto corregible: nada en un documento XML dice si un elemento es repetible. Solo un esquema lo sabe. Si tu código espera una lista, normalízala al recibirla.
El contenido mixto
Este JSON simplemente no puede expresarlo, y conviene decirlo sin rodeos.
<p>Hola <b>mundo</b> otra vez</p>
JSON no tiene forma de decir que Hola iba antes de <b> y otra vez después. Los fragmentos de texto se reúnen bajo #text y su posición respecto a los elementos se pierde, junto con el espaciado entre ellos. Si lo que importa es el texto —un documento más que un registro—, no conviertas: usa el formateador XML.
Los tipos
<a>1</a> da el número 1. <a>007</a> da la cadena "007", porque un cero inicial suele ser un código postal o un número de cuenta, y leerlo como siete lo pierde. Un identificador de veinte dígitos también sigue siendo cadena: un número JSON lo redondearía.
Lo que no es dato
La declaración XML y cualquier instrucción de procesamiento se descartan. Describen el documento, no su contenido: una clave ?xml junto a tu elemento raíz nunca fue información que hubieras pedido.
Privado por diseño
Todo se ejecuta localmente en tu navegador con JavaScript. Tus datos nunca se suben a un servidor, lo que hace que la herramienta sea segura para contenido sensible y funcione sin conexión.