Das Unmarshaling von XML-Daten in eine Zwischenstruktur, die dann in eine Karte konvertiert wird, kann bei großen Datensätzen zeitaufwändig sein. In solchen Fällen ist das direkte Unmarshaling in eine Karte ein effizienterer Ansatz.
Um XML direkt in eine Karte zu entmarshalieren, können Sie einen benutzerdefinierten Typ erstellen, der die xml.Unmarshaler-Schnittstelle implementiert. Dieser Typ übernimmt den Unmarshaling-Prozess und speichert die Daten in einem Map[string]string.
Beispiel:
type classAccessesMap struct { m map[string]string } // UnmarshalXML implements the xml.Unmarshaler interface to unmarshal XML directly into the map. func (c *classAccessesMap) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { c.m = map[string]string{} key := "" val := "" // Iteratively parse XML tokens. for { t, _ := d.Token() switch tt := t.(type) { // TODO: Handle the inner structure parsing here. case xml.StartElement: key = tt.Name.Local case xml.EndElement: // Store the key-value pair in the map when the end of the "enabled" element is reached. if tt.Name.Local == "enabled" { c.m[key] = val } // Return nil when the end of the "classAccesses" element is reached. if tt.Name == start.Name { return nil } } } }
Verwendung:
// Unmarshal the XML into the custom classAccessesMap type. var classAccessesMap classAccessesMap if err := xml.Unmarshal([]byte(xmlData), &classAccessesMap); err != nil { // Handle error } fmt.Println(classAccessesMap.m) // Prints the map containing the parsed data.
Das obige ist der detaillierte Inhalt vonWie kann ich XML effizient direkt in eine Go-Map entmarshalieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!