Convertir un fichier XML en CSV

Fonctionne sur votre appareil · Votre fichier ne quitte jamais votre appareil.

Déposez un fichier XML d’enregistrements répétés – <records><record>…</record>…</records>, un flux RSS, un export de base de données – et obtenez un CSV avec une ligne par enregistrement. Le document est lu par l’analyseur XML du navigateur, puis la plus longue liste d’éléments répétés est trouvée automatiquement, quelle que soit son enveloppe – un attribut sur l’enveloppe, ou le titre et le lien propres à un flux à côté de ses items – et la ligne de résultat nomme la liste utilisée.

Chaque enregistrement est aplati comme dans l’outil JSON en CSV : les éléments imbriqués deviennent des colonnes à points (adresse.ville), les attributs des colonnes préfixées par @ (@id), les éléments intérieurs répétés qui ont leurs propres enfants des colonnes numérotées (line.0.sku), les éléments de texte répétés sont joints par des points-virgules (a;b), et la ligne d’en-tête est l’union de toutes les colonnes trouvées. Les valeurs sont écrites exactement comme dans le XML. Les champs contenant des virgules, des guillemets ou des retours à la ligne sont entourés de guillemets selon la RFC 4180.

Le CSV est en UTF-8 avec un BOM facultatif pour Excel, vous choisissez le séparateur, et vous pouvez voir les 200 premières lignes avant de télécharger. Rien n’est envoyé.

Comment Convertir un fichier XML en CSV

  1. Déposez un fichier XML, ou collez le XML dans la zone.
  2. Choisissez le séparateur de sortie et si vous voulez le BOM pour Excel.
  3. Cliquez sur « Convertir en CSV » et vérifiez l’aperçu.
  4. Téléchargez le .csv.

Formats pris en charge et limites

Entrée
XML (.xml) – fichier ou texte collé, dans l’encodage qu’il déclare
Sortie
CSV, RFC 4180, UTF-8, BOM facultatif
Lignes
La plus longue liste d’éléments répétés
Imbrication
Éléments enfants → colonnes à points ; attributs → colonnes @
Où ça tourne
Dans votre navigateur – rien n’est envoyé

Ne convient pas pour : Les documents contenant plusieurs listes d’enregistrements – seule la plus longue devient les lignes ; pour une autre, convertissez en JSON, copiez cette liste et convertissez-la avec l’outil JSON en CSV.

Comment les lignes sont trouvées

Les lignes sont la plus longue liste d’éléments répétés située n’importe où sous la racine, quelle que soit son enveloppe. <records count="2"><record>…</record><record>…</record></records> donne une ligne par <record>, même si l’enveloppe porte un attribut. Un flux RSS donne une ligne par <item>, avec des colonnes comme title, link et pubDate, même si le titre et le lien propres au canal se trouvent à côté des items. La ligne sous le résultat nomme la liste utilisée, par exemple rss.channel.item.

Les valeurs posées à côté de cette liste, comme le titre propre au flux, n’appartiennent à aucun enregistrement et sont laissées de côté. Quand un document contient plusieurs listes d’enregistrements, seule la plus longue devient les lignes. Pour en obtenir une autre, convertissez le fichier avec /xml-to-json, copiez cette liste de son [ à son ], collez-la dans /json-to-csv et convertissez.

Un fichier qui ne contient qu’un enregistrement

Sans élément répété, l’enregistrement unique forme la seule ligne, et ses colonnes sont ses propres noms de champs : <records><record><name>Ali</name><city>Lyon</city></record></records> donne les colonnes name et city. Un fichier qui contient tantôt un enregistrement, tantôt plusieurs garde donc le même en-tête, ce qui compte quand un autre programme lit les colonnes par leur nom.

Comment les valeurs sont écrites

Les valeurs sont écrites exactement comme dans le XML : 1.50 reste 1.50, TRUE reste TRUE, et un élément qui contient NULL donne le texte NULL, tandis qu’un élément vide donne une cellule vide. 007 garde ses zéros, et les dates restent telles qu’elles sont écrites. Une valeur qui commence par =, +, - ou @ reçoit une apostrophe devant, comme sur /json-to-csv, pour qu’un tableur ne l’exécute pas comme une formule.

Les éléments enfants répétés qui ne contiennent que du texte sont joints par des points-virgules dans une même cellule : deux éléments <tag> donnent a;b. Les éléments enfants répétés qui ont eux-mêmes des enfants reçoivent des colonnes numérotées, comme line.0.sku et line.1.sku. Les préfixes d’espaces de noms restent dans les noms de colonnes, comme dans soap:Body.price. Le texte placé à côté d’éléments enfants va dans une colonne #text, sans sa position parmi eux. Le fichier est lu dans l’encodage que déclare sa première ligne.

Questions fréquentes

Mes fichiers sont-ils envoyés sur un serveur ?
Non. La conversion se fait entièrement dans votre navigateur, avec la puissance de votre propre appareil. Le fichier ne quitte pas votre ordinateur ni votre téléphone. Et une fois qu’un outil a servi une première fois, il continue de fonctionner sans connexion (la vidéo, la reconnaissance de texte et la suppression d’arrière-plan téléchargent leur moteur depuis ce site la première fois).
Comment sait-il quels éléments sont les lignes ?
Il prend la plus longue liste d’éléments répétés sous la racine – <records><record>…</record></records> donne donc une ligne par <record>, et un flux RSS une ligne par <item>. Les valeurs posées à côté de cette liste, comme le titre propre au flux, sont laissées de côté. S’il n’y a aucun élément répété, l’enregistrement unique devient une seule ligne, avec ses propres noms de champs comme colonnes.
Où vont les attributs ?
Dans des colonnes préfixées par @ : <record id="3"> produit une colonne nommée @id. Le texte placé à côté d’éléments enfants va dans une colonne #text.
Excel l’ouvrira-t-il correctement ?
Oui. L’option « Ajouter un BOM pour Excel » (activée par défaut) écrit le marqueur dont Excel a besoin pour reconnaître l’UTF-8 ; accents et symboles s’affichent correctement. Pour un Excel en français, choisissez le point-virgule comme séparateur.

Outils associés

Plus dans Tableurs et données

Cette page dans d’autres langues: English · العربية · Deutsch · Español · Русский · Português · 中文 · हिन्दी · Türkçe · עברית · فارسی · اردو · Bahasa Indonesia · বাংলা