Recherche…
Remarques
Bien que de nombreuses utilisations du package encoding/xml
incluent le marshaling et le unmarshaling sur une struct
Go, il convient de noter qu'il ne s'agit pas d'un mapping direct. La documentation du package indique:
Le mappage entre des éléments XML et des structures de données est intrinsèquement vicié: un élément XML est une collection de valeurs anonymes dépendant de l'ordre, tandis qu'une structure de données est une collection de valeurs nommées indépendantes de l'ordre.
Pour des paires clé-valeur simples, non ordonnées, l'utilisation d'un encodage différent tel que Gob ou JSON peut être plus adaptée. Pour les données ordonnées ou les flux de données basés sur des événements / rappels, XML peut être le meilleur choix.
Décodage / désarchivage de base d'éléments imbriqués avec des données
Les éléments XML nichent souvent, ont des données dans des attributs et / ou des données de caractères. La manière de capturer ces données consiste à utiliser respectivement ,attr
et ,chardata
pour ces cas.
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)
}