Zoeken…
Opmerkingen
Hoewel veel gebruik van het encoding/xml
pakket marshaleren en unmarshaleren naar een Go- struct
, is het vermeldenswaard dat dit geen directe toewijzing is. De pakketdocumentatie vermeldt:
Het in kaart brengen tussen XML-elementen en gegevensstructuren is inherent onjuist: een XML-element is een orderafhankelijke verzameling anonieme waarden, terwijl een gegevensstructuur een orderonafhankelijke verzameling benoemde waarden is.
Voor eenvoudige, niet-geordende sleutel / waarde-paren is het wellicht beter om een andere codering te gebruiken, zoals Gob's of JSON . Voor bestelde gegevens of op gegevens / gebeurtenissen gebaseerde gegevensstromen is XML wellicht de beste keuze.
Basisdecodering / unmarshalling van geneste elementen met gegevens
XML-elementen nestelen vaak, hebben gegevens in attributen en / of als karaktergegevens. De manier om deze gegevens vast te leggen is door respectievelijk ,attr
en ,chardata
voor die gevallen te gebruiken.
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)
}