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)

}

Playground



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow