Apabila berurusan dengan set data XML yang besar, proses penukaran dwi untuk unmarshaling ke dalam struct dan kemudian ke dalam peta boleh memakan masa . Artikel ini meneroka pendekatan yang lebih cekap untuk menyahmarshal XML secara terus ke dalam peta.
Masalah:
Matlamatnya adalah untuk menukar XML berikut kepada rentetan[rentetan] peta , di mana pasangan nilai kunci diekstrak daripada elemen anak:
<classAccesses> <apexClass>AccountRelationUtility</apexClass> <enabled>true</enabled> </classAccesses>
Untuk mencapai matlamat ini, struktur data tersuai yang melaksanakan Antara muka xml.Unmarshaller diperlukan.
Penyelesaian:
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 } } } }
Dengan melaksanakan antara muka xml.Unmarshaller, struktur data tersuai boleh menyahmarshal XML secara langsung ke dalam peta [rentetan] rentetan. Ini menghapuskan keperluan untuk penukaran struktur perantaraan, menghasilkan proses unmarshaling yang lebih cekap.
Penyelesaian Separa dan Demonstrasi:
Penyelesaian separa yang menunjukkan pendekatan tersedia di https://play.golang.org/p/7aOQ5mcH6zQ. Penyelesaian ini termasuk struktur data tersuai dan sampel XML untuk menunjukkan proses unmarshaling.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyahmarshal XML Secara Terus ke dalam rentetan Go Map[rentetan]?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!