0Pricing
Go Academy · Lektion

encoding/xml

Mit XML arbeiten

encoding/xml ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Mit XML arbeiten

XML ist ein ausführliches, tagbasiertes Format, das in Legacy-Systemen und Konfigurationsdateien noch häufig verwendet wird. Das Go-Paket encoding/xml kann XML marshalen und unmarshalen und entspricht dabei dem json-Paket.

Nach XML marshalen

xml.Marshal wandelt einen Go-Wert in XML-Bytes um.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	Name string
	Age  int
}

func main() {
	b, _ := xml.Marshal(User{"Ann", 30})
	fmt.Println(string(b))
}

XML-Tags

Das xml-Tag steuert Elementnamen, genauso wie JSON-Tags JSON-Schlüssel steuern.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	Name string "xml:\"name\""
}

func main() {
	b, _ := xml.Marshal(User{"Ann"})
	fmt.Println(string(b))
}

Root-Element mit XMLName

Ein Feld vom Typ xml.Name mit dem Namen XMLName legt den Namen des Root-Elements fest.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	XMLName xml.Name "xml:\"user\""
	Name    string   "xml:\"name\""
}

func main() {
	b, _ := xml.Marshal(User{Name: "Ann"})
	fmt.Println(string(b))
}

Attribute

Fügen Sie einem Tag ,attr hinzu, um ein Feld als XML-Attribut statt als untergeordnetes Element auszugeben.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	XMLName xml.Name "xml:\"user\""
	ID      int      "xml:\"id,attr\""
	Name    string   "xml:\"name\""
}

func main() {
	b, _ := xml.Marshal(User{ID: 7, Name: "Ann"})
	fmt.Println(string(b))
}

XML unmarshalen

xml.Unmarshal analysiert XML-Bytes in einen Pointer und ordnet Elementnamen den Tags zu.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	Name string "xml:\"name\""
}

func main() {
	var u User
	xml.Unmarshal([]byte("<User><name>Bob</name></User>"), &u)
	fmt.Println(u.Name)
}

Verschachtelte Elemente

Verschachtelte Structs werden auf verschachtelte XML-Elemente abgebildet und bilden so einen Baum.

package main

import (
	"encoding/xml"
	"fmt"
)

type Address struct {
	City string "xml:\"city\""
}
type User struct {
	Name    string  "xml:\"name\""
	Address Address "xml:\"address\""
}

func main() {
	b, _ := xml.Marshal(User{"Ann", Address{"Rome"}})
	fmt.Println(string(b))
}

Lesbares XML

xml.MarshalIndent formatiert die Ausgabe zur besseren Lesbarkeit mit Einrückungen.

package main

import (
	"encoding/xml"
	"fmt"
)

type User struct {
	Name string "xml:\"name\""
}

func main() {
	b, _ := xml.MarshalIndent(User{"Ann"}, "", "  ")
	fmt.Println(string(b))
}

Wiederholte Elemente

Ein Slice-Feld wird zu einer Reihe wiederholter XML-Elemente, eines pro Element.

package main

import (
	"encoding/xml"
	"fmt"
)

type List struct {
	Items []string "xml:\"item\""
}

func main() {
	b, _ := xml.Marshal(List{Items: []string{"a", "b"}})
	fmt.Println(string(b))
}

JSON im Vergleich zu XML

Die APIs entsprechen einander: Marshal, Unmarshal, MarshalIndent und Struct-Tags. XML ergänzt Attribute und das XMLName-Konzept für das Root-Element. Bevorzugen Sie JSON für neue APIs und XML für Legacy-Systeme.

Header-Deklaration

Die Konstante xml.Header enthält die standardmäßige XML-Deklaration als String, den Sie für vollständige Dokumente an die Ausgabe voranstellen können.

package main

import (
	"encoding/xml"
	"fmt"
)

func main() {
	fmt.Print(xml.Header)
}

Kurzer Check

Was bewirkt die Option ,attr in einem XML-Struct-Tag?

Zusammenfassung

encoding/xml:

  • xml.Marshal / Unmarshal entsprechen der JSON-API
  • XML-Tags benennen Elemente; ,attr erzeugt Attribute
  • XMLName legt das Root-Element fest; Slices wiederholen Elemente

Häufig gestellte Fragen

Ist die Lektion „encoding/xml“ kostenlos?

Ja — der vollständige Text von „encoding/xml“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „encoding/xml“?

Mit XML arbeiten Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Go Academy zu starten?

Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „encoding/xml“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?

Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. encoding/json – Wiederholung
  2. encoding/xml
  3. encoding/csv
  4. gob und binäre Kodierung
← Zurück zu Go Academy