Convertire un file CSV in XML con Go

La conversione di un file CSV in formato XML può essere necessaria in molte situazioni, come l'integrazione di dati tra applicazioni o la trasformazione di dati per l'elaborazione in sistemi diversi. In questo articolo, vedremo come realizzare un programma in Go per convertire un file CSV in XML.

Supponiamo di avere un file CSV chiamato data.csv con il seguente contenuto:


name,age,city
Alice,30,New York
Bob,25,San Francisco
Charlie,35,Los Angeles

Quindi creiamo il codice principale:


package main

import (
	"encoding/csv"
	"encoding/xml"
	"fmt"
	"os"
)

type Record struct {
	Name string `xml:"name"`
	Age  string `xml:"age"`
	City string `xml:"city"`
}

type Records struct {
	XMLName xml.Name `xml:"records"`
	Record  []Record `xml:"record"`
}

func main() {
	// Apri il file CSV
	csvFile, err := os.Open("data.csv")
	if err != nil {
		fmt.Println("Errore nell'apertura del file CSV:", err)
		return
	}
	defer csvFile.Close()

	// Leggi il file CSV
	reader := csv.NewReader(csvFile)
	records, err := reader.ReadAll()
	if err != nil {
		fmt.Println("Errore nella lettura del file CSV:", err)
		return
	}

	// Verifica che ci siano righe
	if len(records) < 2 {
		fmt.Println("Il file CSV non contiene dati.")
		return
	}

	// Estrarre i dati dal CSV e costruire le strutture XML
	var data Records
	headers := records[0] // Intestazioni

	for _, row := range records[1:] {
		record := Record{
			Name: row[0],
			Age:  row[1],
			City: row[2],
		}
		data.Record = append(data.Record, record)
	}

	// Scrivi il file XML
	xmlFile, err := os.Create("data.xml")
	if err != nil {
		fmt.Println("Errore nella creazione del file XML:", err)
		return
	}
	defer xmlFile.Close()

	encoder := xml.NewEncoder(xmlFile)
	encoder.Indent("", "  ")
	err = encoder.Encode(data)
	if err != nil {
		fmt.Println("Errore nella scrittura del file XML:", err)
		return
	}

	fmt.Println("Conversione completata! File XML generato: data.xml")
}


Ecco come appare il file data.xml:


<records>
  <record>
    <name>Alice</name>
    <age>30</age>
    <city>New York</city>
  </record>
  <record>
    <name>Bob</name>
    <age>25</age>
    <city>San Francisco</city>
  </record>
  <record>
    <name>Charlie</name>
    <age>35</age>
    <city>Los Angeles</city>
  </record>
</records>

Conclusione

In questa guida, abbiamo visto come convertire un file CSV in XML utilizzando Go. Questo approccio è altamente scalabile e può essere adattato a diverse esigenze. Se il tuo file CSV ha una struttura diversa, puoi semplicemente aggiornare le definizioni delle strutture Go per adattarle al tuo caso.

Torna su