Problem:
Sie müssen XML-Daten nicht zuerst in eine Karte entpacken Unmarshalling in eine Struktur und anschließendes Konvertieren der Struktur in eine Karte, was für eine große Struktur zu viel Zeit in Anspruch nimmt Datensatz.
<classAccesses> <apexClass>AccountRelationUtility</apexClass> <enabled>true</enabled> </classAccesses>
Gewünschte Karte:
map[string]string{ "ApexClass": "enabled" }
Lösung:
Implementieren Sie die xml.Unmarshaller-Schnittstelle für ein benutzerdefinierter Typ, der die gewünschte Kartenstruktur darstellt:
type classAccessesMap struct { m map[string]string } func (c *classAccessesMap) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { c.m = map[string]string{} key := "" val := "" for { t, _ := d.Token() switch tt := t.(type) { // TODO: ... case xml.StartElement: fmt.Println(">", tt) case xml.EndElement: fmt.Println("<", tt) if tt.Name == start.Name { return nil } if tt.Name.Local == "enabled" { c.m[key] = val } } } }
Dann, Verwenden Sie die Funktion xml.Unmarshal, um die XML-Daten direkt in den benutzerdefinierten Typ zu analysieren:
var classAccesses classAccessesMap if err := xml.Unmarshal(data, &classAccesses); err != nil { // Handle error } fmt.Println(classAccesses.m)
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich XML direkt in eine Go-Map?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!