100 % local — vos données ne quittent jamais votre navigateur

XML en CSV — une ligne par élément

Transformez des éléments XML répétés en lignes. Les noms des enfants deviennent les colonnes, prêt à ouvrir dans un tableur ou à passer à un script.

Instantané Privé Zéro cookie
Délimiteur

Entrée XML

Sortie CSV

Ce que fait cet outil

Il repère l’élément répété et fait de chaque occurrence une ligne.

<commandes>
  <commande id="1"><client>Ada</client><total>42</total></commande>
  <commande id="2"><client>Alan</client><total>17</total></commande>
</commandes>
client,total,id
Ada,42,1
Alan,17,2

Les enveloppes à clé unique sont traversées : <commandes><commande>… ne demande aucun réglage. Une enveloppe qui porte son propre attribut — <commandes nombre="2"> — l’est aussi : cet attribut décrit la collection, pas une ligne, et ne devient donc pas une colonne. Un attribut posé sur une ligne, si.

Les attributs sont des colonnes

Un identifiant logé dans un attribut est une donnée comme une autre. @_id devient la colonne id.

Le préfixe n’est gardé que dans un seul cas : lorsqu’un élément enfant porte déjà ce nom. <row id="1"><id>x</id></row> donne deux colonnes, id et @_id, parce qu’il s’agit de deux choses différentes et que les fondre en ferait disparaître une. Un réglage supprime tout à fait les attributs si votre tableau ne doit venir que des éléments.

Une ligne est un tableau

Un export d’un seul enregistrement se convertit comme les autres. Cela mérite d’être dit parce que ce n’était pas le cas : XML vers JSON rend un objet plutôt qu’un tableau quand l’élément n’est pas répété, et exiger le tableau refusait un document parfaitement ordinaire.

Un élément racine qui ne contient que du texte reste refusé : une valeur n’est pas un tableau, et faire semblant n’aiderait personne.

Les lignes qui ne se ressemblent pas

L’en-tête est l’union de tout ce qui a été vu, dans l’ordre d’apparition. Une ligne à qui il manque une colonne reçoit une cellule vide :

<r><row><a>1</a></row><row><a>2</a><b>3</b></row></r>
a,b
1,
2,3

Un export irrégulier est normal. Écarter la colonne en trop, ou la ligne qui ne l’a pas, perdrait des données par souci d’ordre.

Ce qu’une cellule ne peut pas contenir

Une cellule porte une valeur. Quand un élément contient un sous-arbre, ce sous-arbre est écrit en JSON dans la cellule plutôt qu’étalé sur des noms de colonnes inventés. C’est laid et c’est honnête : rien n’est perdu, et vous voyez exactement ce qu’il y avait.

Confidentiel par conception

Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.

Questions fréquentes

Où est passé mon attribut id ? Il disparaissait avant.
C’est une colonne, désormais. `<row id="1">` donne une colonne `id` à côté de celles qui viennent des éléments enfants : un identifiant logé dans un attribut reste une donnée, et le perdre en silence était un vrai défaut de cet outil, trouvé en écrivant cette page. Si un élément enfant porte déjà le nom `id`, l’attribut garde son préfixe `@_` pour que les deux colonnes restent distinctes.
Pourquoi un élément imbriqué ressort-il en JSON dans la cellule ?
Parce qu’une cellule CSV porte une valeur et que votre élément porte un sous-arbre. L’aplatir en colonnes `parent.enfant` inventerait une convention de nommage que votre consommateur n’a pas approuvée ; du JSON dans la cellule est au moins sans ambiguïté et réversible. Aplatissez avant de convertir si vous voulez de vraies colonnes.
Mes lignes n’ont pas toutes les mêmes enfants. Que se passe-t-il ?
L’en-tête est l’union de tous les éléments et attributs rencontrés, dans l’ordre d’apparition, et une ligne à laquelle il en manque un reçoit une cellule vide. Rien n’est écarté pour cause d’irrégularité : un export où seuls certains enregistrements portent un deuxième prénom est normal, pas une erreur.

Convertisseurs associés