Szukaj…
Uwagi
Chociaż wiele zastosowań pakietu encoding/xml
obejmuje marshaling i unmarshaling do struct
Go, warto zauważyć, że nie jest to bezpośrednie mapowanie. Dokumentacja pakietu stanowi:
Mapowanie między elementami XML a strukturami danych jest z natury wadliwe: element XML to zbiór anonimowych wartości zależny od zamówienia, a struktura danych to zbiór nazwanych niezależny od zamówienia.
W przypadku prostych, nieuporządkowanych par klucz-wartość lepszym rozwiązaniem może być użycie innego kodowania, takiego jak Gob lub JSON . W przypadku uporządkowanych danych lub strumieni danych opartych na zdarzeniach / wywołaniach zwrotnych najlepszym wyborem może być XML.
Podstawowe dekodowanie / odinstalowywanie zagnieżdżonych elementów z danymi
Elementy XML często zagnieżdżają się, mają dane w atrybutach i / lub jako dane znakowe. ,chardata
przechwytywania tych danych jest użycie odpowiednio ,attr
i ,chardata
w tych przypadkach.
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)
}