API XML in CSV#

L'API XML in CSV converte un file XML tabellare in formato CSV con una singola richiesta a POST /v1/convert/xml-to-csv. Si aspetta elementi fratelli piatti e ripetuti con elementi figli coerenti, e rimuove automaticamente i wrapper <root> e <item>. La risposta è CSV grezzo per impostazione predefinita, oppure imposta direct_download=false per i metadati con un URL di download prefirmato.


Endpoint#

POST /v1/convert/xml-to-csv

Content-Type: multipart/form-data

Input accettato: file .xml (codificati in UTF-8)

Formato di output: .csv (text/csv)


Autenticazione#

Richiede una chiave API privata oppure un token JWT ottenuto da una chiave pubblica.

X-API-Key: sk_your_private_key

Oppure:

Authorization: Bearer <jwt_token>

Parametri della richiesta#

Parametro Tipo Obbligatorio Predefinito Descrizione
file file -- Il file .xml da convertire. Deve contenere dati tabellari (elementi ripetuti con campi coerenti). Codificato in UTF-8.
output_filename string No Nome file di input Nome file di output personalizzato. L'estensione .csv viene aggiunta automaticamente.
direct_download boolean No true Con true, restituisce i byte CSV grezzi. Con false, restituisce i metadati con un URL di download prefirmato.

Regole di conversione#

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

Diventa:

name,age,city
Alice,30,London
Bob,25,Paris
  • Rimuove automaticamente il wrapper <root> (dict radice a chiave singola)
  • Rimuove automaticamente il wrapper <item> (dict a chiave singola contenente la lista)
  • Se viene trovato un singolo record XML (non racchiuso in una lista), viene automaticamente racchiuso in una lista
  • Le intestazioni di colonna derivano dai nomi dei tag figli del primo elemento
  • Il delimitatore è la virgola (non configurabile), il quoting è minimale
Importante: Questo endpoint funziona solo con XML "tabellare" -- elementi fratelli piatti e ripetuti con elementi figli coerenti. XML con nidificazione profonda o contenuto misto fallirà o produrrà risultati imprevisti. Per strutture XML complesse, usa invece xml-to-json.

Risposta#

Download diretto (direct_download=true, predefinito)#

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

Risposta con metadati (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
}

Esempi di codice#

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)

Risposte di errore#

Stato Condizione
400 Bad Request Il file non è un file .xml
400 Bad Request La struttura XML non può essere convertita in CSV (non tabellare)
400 Bad Request L'XML deve contenere elementi con campi coerenti per la conversione in CSV
400 Bad Request Codifica XML non valida (attesa UTF-8)
401 Unauthorized Chiave API / token JWT mancante o non valido
402 Payment Required Quota mensile di ops esaurita
413 Payload Too Large Il file supera la dimensione massima prevista dal piano

Limiti#

Limite Valore
Dimensione massima del file Dipende dal piano (Founding: 5 MB)
Codifica di input Solo UTF-8
Struttura XML Solo tabellare (elementi piatti e ripetuti)
Conversioni mensili Dipende dal piano

Domande frequenti#

Come convertire XML in CSV con un'API REST?#

Invia una richiesta POST multipart/form-data a POST /v1/convert/xml-to-csv con il file .xml nel campo file, autenticandoti con un header X-API-Key o un token JWT Authorization: Bearer. Per impostazione predefinita il corpo della risposta contiene i byte CSV grezzi.

Perché la conversione da XML a CSV fallisce con un errore 400?#

Un 400 Bad Request viene restituito quando la struttura XML non è tabellare, gli elementi non hanno campi coerenti, il file non è un .xml oppure la codifica non è UTF-8.

Posso convertire in CSV un XML con nidificazione profonda?#

No. Questo endpoint funziona solo con XML tabellare, ovvero elementi fratelli piatti e ripetuti con elementi figli coerenti. Per strutture XML complesse o con nidificazione profonda, usa invece l'endpoint xml-to-json.

Come vengono determinate le intestazioni di colonna del CSV a partire dall'XML?#

Le intestazioni di colonna derivano dai nomi dei tag figli del primo elemento. I wrapper <root> e <item> vengono rimossi automaticamente e un record singolo viene automaticamente racchiuso in una lista.

Posso cambiare il delimitatore del CSV in output?#

No. Il delimitatore è la virgola e non è configurabile; il quoting è minimale.