处理大型 XML 数据集时,解组为结构体然后解组为映射的双重转换过程可能会变得非常耗时。本文探讨了一种更有效的方法来直接将 XML 解组为映射。
问题:
目标是将以下 XML 转换为映射[string]字符串,其中键值对是从子元素中提取的:
<classAccesses> <apexClass>AccountRelationUtility</apexClass> <enabled>true</enabled> </classAccesses>
为了实现这一点,需要一个自定义数据结构来实现需要xml.Unmarshaller接口。
解决方案:
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 } } } }
通过实现xml.Unmarshaller接口,自定义数据结构可以直接将XML解组为map [字符串]字符串。这消除了中间结构转换的需要,从而实现更高效的解组过程。
部分解决方案和演示:
演示该方法的部分解决方案可在https://play.golang.org/p/7aOQ5mcH6zQ。该解决方案包括自定义数据结构和示例 XML 以演示解组过程。
以上是如何有效地将 XML 直接解组为 Go Map[string]string?的详细内容。更多信息请关注PHP中文网其他相关文章!