---
seo_title: API XML vers CSV | Convertir du XML tabulaire en CSV | EnConvert
meta_desc: Convertissez du XML en CSV via POST /v1/convert/xml-to-csv. Aplatit le XML tabulaire à éléments répétés en lignes CSV, en direct ou via une URL présignée.
keywords: api xml vers csv, convertir xml en csv, convertisseur xml csv api, xml vers csv api rest, xml tabulaire en csv api, xml en csv python requests, xml en csv curl, exporter données xml en csv api
---

# 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

```xml
<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 :

```csv
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

<div class="alert alert-warning">
<strong>Important :</strong> 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 <a href="/fr/docs/endpoints/convert/data-formats/xml-to-json">xml-to-json</a>.
</div>

---

## 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`)

```json
{
    "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

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

```javascript
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

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

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