Ricerca…
Osservazioni
Mentre molti usi del pacchetto encoding/xml
includono il marshalling e l'unmarshaling su una struct
Go, vale la pena notare che non si tratta di una mappatura diretta. La documentazione del pacchetto afferma:
La mappatura tra elementi XML e strutture dati è intrinsecamente imperfetta: un elemento XML è una raccolta dipendente dall'ordine di valori anonimi, mentre una struttura dati è una raccolta indipendente dall'ordine di valori denominati.
Per coppie di valori-chiave semplici, non ordinate, usare una codifica diversa come Gob o JSON può essere una soluzione migliore. Per dati ordinati o flussi di dati basati su eventi / richiamate, XML può essere la scelta migliore.
Decodifica di base / annullamento della memoria di elementi nidificati con dati
Gli elementi XML spesso nidificano, hanno dati in attributi e / o come dati di carattere. Il modo per acquisire questi dati è usando ,attr
e ,chardata
rispettivamente per questi casi.
var doc = `
<parent>
<child1 attr1="attribute one"/>
<child2>and some cdata</child2>
</parent>
`
type parent struct {
Child1 child1 `xml:"child1"`
Child2 child2 `xml:"child2"`
}
type child1 struct {
Attr1 string `xml:"attr1,attr"`
}
type child2 struct {
Cdata1 string `xml:",cdata"`
}
func main() {
var obj parent
err := xml.Unmarshal([]byte(doc), &obj)
if err != nil {
log.Fatal(err)
}
fmt.Println(obj.Child2.Cdata1)
}