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
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.