0Pricing
Go Academy · Lezione

encoding/xml

Lavorare con XML

encoding/xml è una lezione Go Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Go Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Go Academy include 4 lezioni in totale.

Utilizzo di XML

XML è un formato prolisso basato su tag, ancora comune nei sistemi e nei file di configurazione legacy. Il pacchetto Go encoding/xml lo serializza e deserializza, in modo analogo al pacchetto json.

Marshal in XML

xml.Marshal converte un valore Go in byte XML.

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))
}

Tag XML

Il tag xml controlla i nomi degli elementi, proprio come i tag json controllano le chiavi JSON.

package main

import (
	"encoding/xml"
	"fmt"
)

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

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

Elemento radice con XMLName

Un campo di tipo xml.Name chiamato XMLName imposta il nome dell'elemento radice.

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))
}

Attributi

Aggiungere ,attr a un tag per rappresentare un campo come attributo XML anziché come elemento figlio.

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))
}

Unmarshal di XML

xml.Unmarshal analizza i byte XML inserendoli in un puntatore e associa i nomi degli elementi ai tag.

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)
}

Elementi annidati

Le struct annidate corrispondono a elementi XML annidati, formando un albero.

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))
}

XML formattato

xml.MarshalIndent formatta l'output con l'indentazione per migliorarne la leggibilità.

package main

import (
	"encoding/xml"
	"fmt"
)

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

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

Elementi ripetuti

Un campo slice diventa una serie di elementi XML ripetuti, uno per ogni elemento.

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 e XML

Le API si corrispondono: Marshal, Unmarshal, MarshalIndent e tag delle struct. XML aggiunge gli attributi e il concetto di elemento radice XMLName. Per le nuove API è preferibile JSON; XML è adatto ai sistemi legacy.

Dichiarazione dell'header

La costante xml.Header contiene la stringa standard della dichiarazione XML, che è possibile anteporre all'output per ottenere documenti completi.

package main

import (
	"encoding/xml"
	"fmt"
)

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

Verifica rapida

Cosa fa l'opzione ,attr in un tag struct XML?

Riepilogo

encoding/xml:

  • xml.Marshal / Unmarshal rispecchiano l'API json
  • I tag xml assegnano il nome agli elementi; ,attr crea attributi
  • XMLName imposta la radice; gli slice ripetono gli elementi

Domande Frequenti

La lezione «encoding/xml» è gratuita?

Sì — il testo completo di «encoding/xml» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Go Academy, passa a CoddyKit PRO. Il corso Go Academy include 4 lezioni in totale.

Cosa imparerò in «encoding/xml»?

Lavorare con XML Eserciti Go Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Go Academy?

Non è richiesta alcuna esperienza precedente. Go Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «encoding/xml»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Go Academy?

Sì. Ogni lezione Go Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Ripasso di encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob e codifica binaria
← Torna a Go Academy