將XML 資料解組為中間結構,然後將其轉換為映射,對於大型資料集來說可能非常耗時。在這種情況下,直接解組到映射中是一種更有效的方法。
要將 XML 直接解組到映射中,您可以建立一個實作 xml.Unmarshaler 介面的自訂類型。此類型將處理解群組程序並將資料儲存在映射[string]字串中。
範例:
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 } } } }
用法:
// 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.
以上是如何有效地將 XML 直接解組到 Go Map ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!