Qué hace esta herramienta
Encuentra el elemento repetido y convierte cada aparición en una fila.
<pedidos>
<pedido id="1"><cliente>Ada</cliente><total>42</total></pedido>
<pedido id="2"><cliente>Alan</cliente><total>17</total></pedido>
</pedidos>
cliente,total,id
Ada,42,1
Alan,17,2
Las envolturas de clave única se atraviesan solas: <pedidos><pedido>… no necesita configuración. Una envoltura con su propio atributo —<pedidos total="2">— también: ese atributo describe la colección, no una fila, así que no pasa a ser columna. Un atributo puesto en una fila, sí.
Los atributos son columnas
Un identificador alojado en un atributo es un dato como cualquier otro. @_id pasa a ser la columna id.
El prefijo se conserva en un solo caso: cuando un elemento hijo ya lleva ese nombre. <row id="1"><id>x</id></row> da dos columnas, id y @_id, porque son dos cosas distintas y fundirlas haría desaparecer una. Un interruptor descarta los atributos por completo si tu tabla debe venir solo de los elementos.
Una fila es una tabla
Un export de un solo registro se convierte como cualquier otro. Merece decirse porque antes no era así: XML a JSON devuelve un objeto y no un array cuando el elemento no se repite, y exigir el array rechazaba un documento perfectamente corriente.
Un elemento raíz que solo contiene texto sigue rechazándose: un valor no es una tabla, y fingir lo contrario no ayudaría a nadie.
Las filas que no se parecen
La cabecera es la unión de todo lo visto, en orden de aparición. A la fila que le falte una columna se le da una celda vacía:
<r><row><a>1</a></row><row><a>2</a><b>3</b></row></r>
a,b
1,
2,3
Un export irregular es normal. Descartar la columna de más, o la fila que no la tiene, perdería datos por afán de orden.
Lo que una celda no puede contener
Una celda lleva un valor. Cuando un elemento contiene un subárbol, ese subárbol se escribe como JSON dentro de la celda en lugar de repartirse en nombres de columna inventados. Es feo y es honesto: no se pierde nada, y ves exactamente qué había.
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.