Kategorien
GO Lang XML

XML in GO

Das Dateiformat .xml ist sehr beliebt um Datenmengen von Service A zu Service B zu übertragen. Aber wie genau können Sie diese Dateien auslesen?

Das werden wir Ihnen in diesem kleinen Tutorial erklären. Wenn Sie etwas mit GO vertraut ist, dann sollte das ganze kein Problem für Sie sein. Dabei gehen wir nun wie folgt vor. Dafür haben wir für Sie eine Beispiel Datei herausgesucht. Diese finden Sie hier.

Wenn Sie sich diese Datei genauer ansehen, dann sehen Sie, dass es eine XML Datei einen ähnlichen Aufbau wie eine HTML Datei hat.

Nur wie können Sie diese nun auslesen?

Dazu können wir onboard Mittel von GO nutzen. Sie werden für dieses Beispiel folgende Pakete nutzen: „encoding/xml“, „fmt“, „io/ioutil“, „os“.

Wenn Sie sich unser Beispiel ansehen, dann sehen Sie das wir erst die Struktur der XML Datei in structs nachgebaut haben. Ähnlich wie man es auch bei JSON Dateien macht. Im zweiten Schritt öffnen wir die Datei mit dem os. Paket. Und angeben direkt wieder an, dass es nach Beendigung der Funktion wieder geschlossen werden soll. In den folgenden Schritten lesen Sie die gesamte Datei einmal aus und verarbeiten diese.

package main

import (
	"encoding/xml"
	"fmt"
	"io/ioutil"
	"os"
)

type Catalog struct {
	XMLName xml.Name `xml:"catalog"`
	Books   []Book   `xml:"book"`
}

type Book struct {
	XMLName     xml.Name `xml:"book"`
	ID          string   `xml:"id,attr"`
	Author      string   `xml:"author"`
	Title       string   `xml:"title"`
	Genre       string   `xml:"genre"`
	Price       float64  `xml:"price"`
	PublishDate string   `xml:"publish_date"`
	Description string   `xml:"description"`
}

func main() {

	// Open xml file
	file, err := os.Open("test.xml")
	if err != nil {
		fmt.Println(err)
	}

	// Close file
	defer file.Close()

	// Read xml file
	bytes, err := ioutil.ReadAll(file)
	if err != nil {
		fmt.Println(err)
	}

	// Save users
	var catalog Catalog

	// Unmarshal xml
	xml.Unmarshal(bytes, &catalog)

	for _, value := range catalog.Books {
		fmt.Println(value.ID)
		fmt.Println(value.Author)
		fmt.Println(value.Price)
	}

}

Wie Sie sehen können Sie, nach der Verarbeitung, mit den Daten vorgehen wie Sie es möchten. Und diese nun in einer Datenbank hinterlegen oder als Beispiel in ein anderes Dateiformat umwandeln.

Ich hoffe Ihnen hat dieses Tutorial geholfen! Wenn Sie Fragen haben, dann schreiben Sie diese gerne in die Kommentare.

Von Jonas Kwiedor

Full- Stack Developer aus Hamburg. Liebt es sich mit Schnittstellen & Automationen auseinander zu setzen und sich mit der Programmiersprache GO Lang zu beschäftigen.