---
seo_title: XML zu CSV API | XML-Tabellendaten in CSV umwandeln | EnConvert
meta_desc: XML in CSV konvertieren via POST /v1/convert/xml-to-csv. Wandelt tabellarisches XML mit wiederholten Elementen in CSV-Zeilen um, direkt oder per Presigned URL.
keywords: xml in csv umwandeln api, xml zu csv konvertieren, xml to csv api, tabellarisches xml zu csv, xml daten als csv exportieren api, xml zu csv rest api, xml zu csv curl, xml zu csv python
---

# XML-zu-CSV-API

Die XML-zu-CSV-API konvertiert eine tabellarische XML-Datei mit einem einzigen Request an `POST /v1/convert/xml-to-csv` in das CSV-Format. Sie erwartet flache, wiederholte Geschwisterelemente mit konsistenten Kindelementen und entfernt `<root>`- und `<item>`-Wrapper automatisch. Die Response ist standardmäßig rohes CSV; setzen Sie `direct_download=false` für Metadaten mit einer Presigned Download-URL.

---

## Endpunkt

```
POST /v1/convert/xml-to-csv
```

**Content-Type:** `multipart/form-data`

**Akzeptierte Eingabe:** `.xml`-Dateien (UTF-8-kodiert)

**Ausgabeformat:** `.csv` (`text/csv`)

---

## Authentifizierung

Erfordert entweder einen privaten API-Key oder ein per Public Key ausgestelltes JWT-Token.

```
X-API-Key: sk_your_private_key
```

Oder:

```
Authorization: Bearer <jwt_token>
```

---

## Request-Parameter

| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|-----------|------|----------|---------|-------------|
| `file` | file | Ja | -- | Die zu konvertierende `.xml`-Datei. Muss tabellarische Daten enthalten (wiederholte Elemente mit konsistenten Feldern). UTF-8-kodiert. |
| `output_filename` | `string` | Nein | Name der Eingabedatei | Eigener Ausgabedateiname. Die Endung `.csv` wird automatisch angehängt. |
| `direct_download` | `boolean` | Nein | `true` | Bei `true` werden die CSV-Rohbytes zurückgegeben. Bei `false` werden Metadaten mit einer Presigned Download-URL zurückgegeben. |

---

## Konvertierungsregeln

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

Wird zu:

```csv
name,age,city
Alice,30,London
Bob,25,Paris
```

- Entfernt den `<root>`-Wrapper automatisch (Root-Dict mit einem einzigen Schlüssel)
- Entfernt den `<item>`-Wrapper automatisch (Dict mit einem einzigen Schlüssel, das die Liste enthält)
- Wird ein einzelner XML-Datensatz gefunden (nicht in eine Liste eingebettet), wird er automatisch in eine Liste verpackt
- Spaltenüberschriften werden aus den Kind-Tag-Namen des ersten Elements abgeleitet
- Trennzeichen ist das Komma (nicht konfigurierbar), Quoting ist minimal

<div class="alert alert-warning">
<strong>Wichtig:</strong> Dieser Endpunkt funktioniert nur mit "tabellarischem" XML -- flache, wiederholte Geschwisterelemente mit konsistenten Kindelementen. Tief verschachteltes XML oder XML mit gemischtem Inhalt schlägt fehl oder liefert unerwartete Ergebnisse. Verwenden Sie für komplexe XML-Strukturen stattdessen <a href="/de/docs/endpoints/convert/data-formats/xml-to-json">xml-to-json</a>.
</div>

---

## Response

### Direkter Download (`direct_download=true`, Standard)

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

### Metadaten-Response (`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
}
```

---

## Codebeispiele

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

---

## Fehlerantworten

| Status | Bedingung |
|--------|-----------|
| `400 Bad Request` | Datei ist keine `.xml`-Datei |
| `400 Bad Request` | XML-Struktur kann nicht in CSV konvertiert werden (nicht tabellarisch) |
| `400 Bad Request` | XML muss Elemente mit konsistenten Feldern für die CSV-Konvertierung enthalten |
| `400 Bad Request` | Ungültige XML-Kodierung (UTF-8 erwartet) |
| `401 Unauthorized` | Fehlender oder ungültiger API-Key / JWT-Token |
| `402 Payment Required` | Monatliches Ops-Kontingent aufgebraucht |
| `413 Payload Too Large` | Datei überschreitet die maximale Dateigröße des Plans |

---

## Limits

| Limit | Wert |
|-------|-------|
| Maximale Dateigröße | Planabhängig (Founding: 5 MB) |
| Eingabekodierung | Nur UTF-8 |
| XML-Struktur | Nur tabellarisch (flache, wiederholte Elemente) |
| Monatliche Konvertierungen | Planabhängig |

---

## Häufig gestellte Fragen

### Wie konvertiere ich XML per REST API in CSV?

Senden Sie einen `multipart/form-data`-POST-Request an `POST /v1/convert/xml-to-csv` mit Ihrer `.xml`-Datei im Feld `file`, authentifiziert über einen `X-API-Key`-Header oder ein JWT-Token via `Authorization: Bearer`. Standardmäßig enthält der Response-Body die CSV-Rohbytes.

### Warum schlägt meine XML-zu-CSV-Konvertierung mit einem 400-Fehler fehl?

Ein `400 Bad Request` wird zurückgegeben, wenn die XML-Struktur nicht tabellarisch ist, die Elemente keine konsistenten Felder haben, die Datei keine `.xml`-Datei ist oder die Kodierung nicht UTF-8 ist.

### Kann ich tief verschachteltes XML in CSV konvertieren?

Nein. Dieser Endpunkt funktioniert nur mit tabellarischem XML, also mit flachen, wiederholten Geschwisterelementen, die konsistente Kindelemente haben. Verwenden Sie für komplexe oder tief verschachtelte XML-Strukturen stattdessen den xml-to-json-Endpunkt.

### Wie werden die CSV-Spaltenüberschriften aus dem XML bestimmt?

Spaltenüberschriften werden aus den Kind-Tag-Namen des ersten Elements abgeleitet. `<root>`- und `<item>`-Wrapper werden automatisch entfernt, und ein einzelner Datensatz wird automatisch in eine Liste verpackt.

### Kann ich das CSV-Trennzeichen in der Ausgabe ändern?

Nein. Das Trennzeichen ist das Komma und nicht konfigurierbar; das Quoting ist minimal.
