Beim Umgang mit großen XML-Datensätzen kann der doppelte Konvertierungsprozess des Unmarshalings in eine Struktur und dann in eine Karte zeitaufwändig werden . In diesem Artikel wird ein effizienterer Ansatz zum direkten Unmarshalieren von XML in eine Karte untersucht.
Problem:
Das Ziel besteht darin, das folgende XML in einen Karten[string]string zu konvertieren , wobei die Schlüssel-Wert-Paare aus untergeordneten Elementen extrahiert werden:
<classAccesses> <apexClass>AccountRelationUtility</apexClass> <enabled>true</enabled> </classAccesses>
Um dies zu erreichen, wird eine benutzerdefinierte Datenstruktur benötigt, die das implementiert Die xml.Unmarshaller-Schnittstelle ist erforderlich.
Lösung:
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: parse the inner structure 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 } } } }
Durch die Implementierung der xml.Unmarshaller-Schnittstelle kann die benutzerdefinierte Datenstruktur das XML direkt in eine Karte entmarshalieren [string]string. Dadurch entfällt die Notwendigkeit einer zwischenzeitlichen Strukturkonvertierung, was zu einem effizienteren Unmarshaling-Prozess führt.
Teillösung und Demonstration:
Eine Teillösung, die den Ansatz demonstriert, ist verfügbar unter https://play.golang.org/p/7aOQ5mcH6zQ. Diese Lösung umfasst die benutzerdefinierte Datenstruktur und ein Beispiel-XML, um den Unmarshaling-Prozess zu demonstrieren.
Das obige ist der detaillierte Inhalt vonWie kann ich XML effizient direkt in einen Go Map[string]string entmarshalieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!