API XML vers CSV#

L'API XML vers CSV convertit un fichier XML tabulaire au format CSV en une seule requête vers POST /v1/convert/xml-to-csv. Elle attend des éléments frères plats et répétés avec des éléments enfants cohérents, et retire automatiquement les conteneurs <root> et <item>. La réponse est du CSV brut par défaut, ou définissez direct_download=false pour des métadonnées avec une URL de téléchargement présignée.


Endpoint#

POST /v1/convert/xml-to-csv

Content-Type : multipart/form-data

Entrée acceptée : fichiers .xml (encodés en UTF-8)

Format de sortie : .csv (text/csv)


Authentification#

Nécessite une clé API privée ou un token JWT obtenu à partir d'une clé publique.

X-API-Key: sk_your_private_key

Ou :

Authorization: Bearer <jwt_token>

Paramètres de requête#

Paramètre Type Obligatoire Défaut Description
file file Oui -- Le fichier .xml à convertir. Doit contenir des données tabulaires (éléments répétés avec des champs cohérents). Encodé en UTF-8.
output_filename string Non Nom du fichier d'entrée Nom de fichier de sortie personnalisé. L'extension .csv est ajoutée automatiquement.
direct_download boolean Non true À true, renvoie les octets CSV bruts. À false, renvoie des métadonnées avec une URL de téléchargement présignée.

Règles de conversion#

<root>
  <item>
    <name>Alice</name>
    <age>30</age>
    <city>London</city>
  </item>
  <item>
    <name>Bob</name>
    <age>25</age>
    <city>Paris</city>
  </item>
</root>

Devient :

name,age,city
Alice,30,London
Bob,25,Paris
  • Retire automatiquement le conteneur <root> (dictionnaire racine à clé unique)
  • Retire automatiquement le conteneur <item> (dictionnaire à clé unique contenant la liste)
  • Si un seul enregistrement XML est trouvé (non contenu dans une liste), il est automatiquement placé dans une liste
  • Les en-têtes de colonnes sont dérivés des noms de balises enfants du premier élément
  • Le délimiteur est la virgule (non configurable), le quoting est minimal
Important : Cet endpoint ne fonctionne qu'avec du XML « tabulaire » -- des éléments frères plats et répétés avec des éléments enfants cohérents. Un XML profondément imbriqué ou à contenu mixte échouera ou produira des résultats inattendus. Pour les structures XML complexes, utilisez plutôt xml-to-json.

Réponse#

Téléchargement direct (direct_download=true, par défaut)#

HTTP 200 OK
Content-Type: text/csv
Content-Disposition: inline; filename="data_20260405_123456789.csv"

Réponse avec métadonnées (direct_download=false)#

{
    "presigned_url": "https://spaces.example.com/...",
    "object_key": "env/files/{project_id}/xml-to-csv/data_20260405_123456789.csv",
    "filename": "data_20260405_123456789.csv",
    "file_size": 1234,
    "conversion_time_seconds": 0.03
}

Exemples de code#

Python#

import requests

with open("data.xml", "rb") as f:
    response = requests.post(
        "https://api.enconvert.com/v1/convert/xml-to-csv",
        headers={"X-API-Key": "sk_your_private_key"},
        files={"file": ("data.xml", f, "application/xml")}
    )

with open("data.csv", "wb") as out:
    out.write(response.content)

Node.js#

const form = new FormData();
form.append("file", fs.createReadStream("data.xml"));

const response = await fetch("https://api.enconvert.com/v1/convert/xml-to-csv", {
    method: "POST",
    headers: { "X-API-Key": "sk_your_private_key" },
    body: form
});

const csv = await response.text();

PHP#

$ch = curl_init("https://api.enconvert.com/v1/convert/xml-to-csv");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: sk_your_private_key"],
    CURLOPT_POSTFIELDS => ["file" => new CURLFile("data.xml", "application/xml")]
]);
$csv = curl_exec($ch);
curl_close($ch);

Go#

body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", "data.xml")
file, _ := os.Open("data.xml")
io.Copy(part, file)
writer.Close()

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/xml-to-csv", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
req.Header.Set("X-API-Key", "sk_your_private_key")
resp, _ := http.DefaultClient.Do(req)

Réponses d'erreur#

Statut Condition
400 Bad Request Le fichier n'est pas un fichier .xml
400 Bad Request La structure XML ne peut pas être convertie en CSV (non tabulaire)
400 Bad Request Le XML doit contenir des éléments avec des champs cohérents pour la conversion CSV
400 Bad Request Encodage XML invalide (UTF-8 attendu)
401 Unauthorized Clé API ou token JWT manquant ou invalide
402 Payment Required Quota mensuel d'ops épuisé
413 Payload Too Large Le fichier dépasse la taille maximale du plan

Limites#

Limite Valeur
Taille max. de fichier Selon le plan (Founding : 5 MB)
Encodage d'entrée UTF-8 uniquement
Structure XML Tabulaire (éléments plats et répétés) uniquement
Conversions mensuelles Selon le plan

Questions fréquentes#

Comment convertir du XML en CSV avec une API REST ?#

Envoyez une requête POST multipart/form-data vers POST /v1/convert/xml-to-csv avec votre fichier .xml dans le champ file, en vous authentifiant via un en-tête X-API-Key ou un token JWT Authorization: Bearer. Par défaut, le corps de la réponse contient les octets CSV bruts.

Pourquoi ma conversion XML vers CSV échoue-t-elle avec une erreur 400 ?#

Un 400 Bad Request est renvoyé lorsque la structure XML n'est pas tabulaire, que les éléments n'ont pas de champs cohérents, que le fichier n'est pas un .xml ou que l'encodage n'est pas UTF-8.

Puis-je convertir du XML profondément imbriqué en CSV ?#

Non. Cet endpoint ne fonctionne qu'avec du XML tabulaire, c'est-à-dire des éléments frères plats et répétés avec des éléments enfants cohérents. Pour les structures XML complexes ou profondément imbriquées, utilisez plutôt l'endpoint xml-to-json.

Comment les en-têtes de colonnes CSV sont-ils déterminés à partir du XML ?#

Les en-têtes de colonnes sont dérivés des noms de balises enfants du premier élément. Les conteneurs <root> et <item> sont retirés automatiquement, et un enregistrement unique est automatiquement placé dans une liste.

Puis-je changer le délimiteur CSV de la sortie ?#

Non. Le délimiteur est la virgule et n'est pas configurable ; le quoting est minimal.