首页 > 后端开发 > Golang > 如何有效地将 XML 直接解组为 Go Map[string]string?

如何有效地将 XML 直接解组为 Go Map[string]string?

Susan Sarandon
发布: 2024-12-05 03:15:11
原创
158 人浏览过

How Can I Efficiently Unmarshal XML Directly into a Go Map[string]string?

将 XML 直接解组到映射中

处理大型 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板