Sök…
Anmärkningar
Även om många användningar av paketet encoding/xml
inkluderar marskalkning och avmarkering till en Go- struct
, är det värt att notera att detta inte är en direkt kartläggning. I paketdokumentationen anges:
Kartläggning mellan XML-element och datastrukturer är naturligtvis felaktig: ett XML-element är en ordningsberoende samling av anonyma värden, medan en datastruktur är en ordningsoberoende samling av namngivna värden.
För enkla, oordnade, nyckelvärdenspar kan det vara bättre att använda en annan kodning som Gobs eller JSON . För beställda data eller händelsebaserade dataströmmar kan XML vara det bästa valet.
Grundläggande avkodning / avmarkering av kapslade element med data
XML-element bo ofta, har data i attribut och / eller som teckenuppgifter. Sättet att fånga upp dessa data är att använda ,attr
respektive ,chardata
för dessa fall.
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)
}