Menyahmarshall data XML ke dalam struktur perantaraan yang kemudiannya ditukar menjadi peta boleh memakan masa untuk set data yang besar. Dalam kes sedemikian, pembongkaran terus ke dalam peta ialah pendekatan yang lebih cekap.
Untuk menyahmarshal XML terus ke dalam peta, anda boleh mencipta jenis tersuai yang melaksanakan antara muka xml.Unmarshaler. Jenis ini akan mengendalikan proses unmarshaling dan menyimpan data dalam rentetan[rentetan] peta.
Contoh:
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 } } } }
Penggunaan:
// 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.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyahmarshal XML Secara Terus ke dalam Peta Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!