Aller au contenu

Convertir XML en Excel

Transformez exports, flux et fichiers de données XML en feuille Excel mise en forme — les enregistrements répétés détectés pour vous, attributs et éléments imbriqués disposés en colonnes, et rien n'est conservé.

  • Jamais conservé
  • Pas de file d'attente, pas d'attente
  • Sans inscription, sans filigrane

Comment ça marche

1

Ajoutez le XML

Déposez un fichier .xml ou collez le XML. Les fichiers Feuille de calcul XML 2003 d'Excel fonctionnent aussi.

2

Choisissez les enregistrements

L'élément répété — produit, article, ligne — est choisi pour vous ; tous les autres tableaux du fichier sont listés, avec un aperçu en direct.

3

Téléchargez

Un .xlsx avec des nombres et des dates typés par colonne, et une ligne d'en-tête en gras avec filtres.

Trouver les lignes dans une arborescence

Le XML ne connaît pas la notion de tableau : la première chose à faire est donc d'identifier quels éléments sont les enregistrements. Le signal fiable, c'est la répétition : un élément parent contenant de nombreux enfants du même nom correspond presque toujours à une liste d'enregistrements, et les éléments enfants et attributs de ces enfants deviennent les colonnes. Cela fonctionne sur l'immense majorité du XML de données — exports, flux, réponses d'API, dumps de configuration — parce qu'ils sont tous construits de la même façon.

Attributs et éléments enfants deviennent tous deux des colonnes, ce qui est nécessaire car le XML offre deux manières de dire la même chose, et chaque système choisit différemment. Un export écrit id="42" comme attribut ; un autre écrit <id>42</id> comme élément ; un troisième fait les deux dans le même document. Une grille ne fait pas la différence, et vous non plus ne devriez pas avoir à la faire : les deux arrivent donc en colonnes, les attributs étant marqués pour qu'un nom présent sous les deux formes ne crée pas de collision.

Une imbrication de plus d'un niveau est aplatie en joignant les noms d'éléments, comme pour du JSON imbriqué. Quand un enregistrement contient un enfant répété — trois lignes de commande dans une commande —, une grille ne peut pas le représenter en lignes sans dupliquer tout ce qui l'entoure : les valeurs répétées restent donc dans leur cellule. Les espaces de noms sont retirés des noms de colonnes, car une colonne appelée ns2:customerName n'aide personne dans un tableur, tandis que les valeurs elles-mêmes restent intactes.

Le XML rédigé n'a aucun tableau à trouver et se convertit mal. Une page XHTML, un article DocBook, un chapitre ePub ou un dessin SVG est un document plutôt qu'un jeu de données : sa structure est imbriquée et irrégulière par nature, et il n'y a aucun enregistrement répété à partir duquel construire des lignes. La conversion produira quelque chose, et ce quelque chose ne sera pas utile. Cette page est faite pour le XML de données, et bien faire la différence fait gagner plus de temps que n'importe quel réglage.

Si vous cherchez autre chose

Quand vous connaissez la structure, extrayez-la délibérément plutôt que de la déduire. xmlstarlet sel -t -m "//order" -v "@id" -o "," -v "customer" -n data.xml extrait exactement les champs voulus avec une expression XPath, et xq fait de même avec une syntaxe à la jq. C'est toute la différence entre une conversion qui fonctionne par chance et une conversion que l'on peut intégrer à un pipeline.

Pour les très gros fichiers, tout ce qui est fait ici a la mauvaise forme : le document est chargé entièrement en mémoire, et un XML analysé sous forme d'arbre occupe généralement plusieurs fois la taille du fichier. Les analyseurs en flux — iterparse en Python, ou SAX dans n'importe quel langage — parcourent un document de plusieurs gigaoctets avec une mémoire constante, et sont la seule approche réaliste au-delà de quelques centaines de mégaoctets.

Questions fréquentes

Comment l'outil sait-il quelle partie du XML est le tableau ?

Les enregistrements sont les éléments qui se répètent sous un même parent — chaque <book> d'un <catalog>, chaque <item> d'un canal RSS. Chaque groupe reçoit un score selon son nombre d'enregistrements et de champs ; le meilleur est choisi, et les autres restent à un clic.

Que deviennent les attributs et les éléments imbriqués ?

Chacun devient une colonne nommée d'après son chemin : un attribut id devient id, <author><name> devient author/name, et <price currency="EUR"> donne price et price/@currency. Un champ qui se répète dans un même enregistrement est réuni dans une seule cellule ou réparti sur des colonnes numérotées.

Peut-il ouvrir les fichiers Feuille de calcul XML 2003 d'Excel ?

Oui. Ces fichiers sont reconnus et convertis feuille par feuille, avec leurs nombres, dates et textes intacts.

Et si le fichier contient plusieurs tableaux — des commandes et leurs articles ?

Chaque groupe répété est proposé séparément. Un tableau imbriqué, comme les articles de chaque commande, comporte une colonne identifiant son enregistrement parent, pour que les deux feuilles puissent être rapprochées.

Mon fichier est-il conservé quelque part ?

Non. Le XML est analysé et le classeur écrit ici, sans que rien ne soit conservé.

Peut-on ouvrir sans risque un XML de provenance inconnue ?

Oui. Le fichier est lu par l'analyseur XML de votre navigateur, qui ne charge jamais d'entités externes ni de DTD et ne peut rien exécuter de ce que contient le fichier.

Bon à savoir : Les documents rédigés plutôt que les données — pages XHTML, articles DocBook — n'ont aucun tableau à trouver et se convertissent mal. Au-delà d'environ 100 MB, un fichier peut dépasser la mémoire de votre navigateur.

Intégrez cet outil à votre site

Gratuit pour tout blog, page de cours ou article d'aide. Collez un seul extrait de code et vos visiteurs pourront l'utiliser directement sur votre page.