---
seo_title: CSV zu XML API | CSV-Dateien in XML konvertieren | EnConvert
meta_desc: CSV in XML konvertieren via POST /v1/convert/csv-to-xml. Spaltenüberschriften werden Element-Tags, jede Zeile ein item-Element. Direkt oder als Presigned URL.
keywords: csv in xml umwandeln api, csv zu xml konvertieren, csv to xml api, csv datei in xml umwandeln, csv zu xml rest api, csv zeilen in xml api, csv zu xml curl, csv zu xml python
---

# CSV-zu-XML-API

Die CSV-zu-XML-API konvertiert eine CSV-Datei mit einem einzigen Request an `POST /v1/convert/csv-to-xml` in das XML-Format. Laden Sie eine UTF-8-`.csv`-Datei per Multipart-Formulardaten hoch. Die Spaltenüberschriften der ersten Zeile werden zu XML-Element-Tag-Namen, und jede weitere Zeile wird zu einem `<item>`-Element innerhalb eines `<root>`-Wrappers. Die Response ist standardmäßig rohes XML; setzen Sie `direct_download=false` für Metadaten mit einer Presigned Download-URL.

---

## Endpunkt

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

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

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

**Ausgabeformat:** `.xml` (`application/xml`)

---

## 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 `.csv`-Datei. Die erste Zeile muss Spaltenüberschriften enthalten. UTF-8-kodiert. |
| `output_filename` | `string` | Nein | Name der Eingabedatei | Eigener Ausgabedateiname. Die Endung `.xml` wird automatisch angehängt. |
| `direct_download` | `boolean` | Nein | `true` | Bei `true` werden die XML-Rohbytes zurückgegeben. Bei `false` werden Metadaten mit einer Presigned Download-URL zurückgegeben. |

---

## Konvertierungsregeln

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

Wird zu:

```xml
<?xml version="1.0" encoding="utf-8"?>
<root>
  <item>
    <name>Alice</name>
    <age>30</age>
    <city>London</city>
  </item>
  <item>
    <name>Bob</name>
    <age>25</age>
    <city>Paris</city>
  </item>
</root>
```

- Die erste Zeile wird als Spaltenüberschriften behandelt (verwendet als XML-Element-Tag-Namen)
- Jede weitere Zeile wird zu einem `<item>`-Element
- Das Root-Element ist immer `<root>` (nicht konfigurierbar)
- Die Ausgabe ist formatiert mit 2-Leerzeichen-Einrückung
- Trennzeichen ist das Komma (nicht konfigurierbar)

---

## Response

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

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

### Metadaten-Response (`direct_download=false`)

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

---

## Codebeispiele

### Python

```python
import requests

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

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

### Node.js

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

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

const xml = await response.text();
```

### PHP

```php
$ch = curl_init("https://api.enconvert.com/v1/convert/csv-to-xml");
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.csv", "text/csv")]
]);
$xml = curl_exec($ch);
curl_close($ch);
```

### Go

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

req, _ := http.NewRequest("POST", "https://api.enconvert.com/v1/convert/csv-to-xml", 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 `.csv`-Datei |
| `400 Bad Request` | CSV-Datei ist leer oder enthält keine gültigen Zeilen |
| `400 Bad Request` | Ungültige CSV-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 |
| Monatliche Konvertierungen | Planabhängig |

---

## Häufig gestellte Fragen

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

Senden Sie einen `multipart/form-data`-POST-Request an `POST /v1/convert/csv-to-xml` mit Ihrer `.csv`-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 XML-Rohbytes.

### Wie bildet die API CSV-Spalten und -Zeilen auf XML-Elemente ab?

Die erste CSV-Zeile wird als Spaltenüberschriften behandelt und als XML-Element-Tag-Namen verwendet. Jede weitere Zeile wird zu einem `<item>`-Element innerhalb eines `<root>`-Wrappers, formatiert mit 2-Leerzeichen-Einrückung.

### Kann ich den Namen des XML-Root-Elements oder das CSV-Trennzeichen ändern?

Nein. Das Root-Element ist immer `<root>` und das Trennzeichen ist das Komma. Beides ist nicht konfigurierbar.

### Warum liefert meine CSV-zu-XML-Konvertierung einen 400-Fehler?

Ein `400 Bad Request` wird zurückgegeben, wenn der Upload keine `.csv`-Datei ist, die CSV leer ist oder keine gültigen Zeilen enthält oder die Kodierung nicht UTF-8 ist.

### Kann ich eine Presigned Download-URL statt des XML-Rohinhalts erhalten?

Ja. Setzen Sie `direct_download=false`, und die API gibt JSON-Metadaten zurück, darunter `presigned_url`, `object_key`, `filename`, `file_size` und `conversion_time_seconds`.
