go – 在自定义UnmarshalXML函数中正确使用XML注释,字段和结构体

考虑下面的结构:
type MyStruct struct {
    Name string
    Meta map[string]interface{}
}

其中有以下UnmarshalXML功能:

func (m *MyStruct) UnmarshalXML(d *xml.Decoder,start xml.StartElement) error {
    var v struct {
        XMLName xml.Name //`xml:"myStruct"`
        Name    string   `xml:"name"`
        Meta    struct {
            Inner []byte `xml:",innerxml"`
        } `xml:"meta"`
    }

    err := d.DecodeElement(&v,&start)
    if err != nil {
        return err
    }

    m.Name = v.Name
    myMap := make(map[string]interface{})

    // ... do the mxj magic here ... -

    temp := v.Meta.Inner

    prefix := "<meta>"
    postfix := "</meta>"
    str := prefix + string(temp) + postfix
    //fmt.Println(str)
    myMxjMap,err := mxj.NewMapXml([]byte(str))
    myMap = myMxjMap

    // fill myMap
    //m.Meta = myMap
    m.Meta = myMap["meta"].(map[string]interface{})
    return nil
}

我的这个代码的问题是这些代码:

prefix := "<meta>"
postfix := "</meta>"
str := prefix + string(temp) + postfix
myMxjMap,err := mxj.NewMapXml([]byte(str))
myMap = myMxjMap
//m.Meta = myMap
m.Meta = myMap["meta"].(map[string]interface{})

我的问题是如何正确使用xml注释(,innerxml等),字段和结构体,因此我不必手动预处理/追加< meta>< / meta>标签之后,将整个Meta字段作为单个地图.

完整的代码示例如下:http://play.golang.org/p/Q4_tryubO6

xml包不提供将XML解组成map [string] interface {}的方式,因为没有一种方法可以实现,在某些情况下也是不可能的.地图不保留元素的顺序(在XML中很重要),并且不允许具有重复键的元素.

您在示例中使用的mxj包具有一些规则,如何将任意XML解组成Go映射.如果您的要求与这些规则不冲突,您可以使用mxj软件包进行所有解析,并且根本不使用xml软件包:

// I am skipping error handling here
m,_ := mxj.NewMapXml([]byte(s))
mm := m["myStruct"].(map[string]interface{})
myStruct.Name = mm["name"].(string)
myStruct.Meta = mm["meta"].(map[string]interface{})

完整例子:http://play.golang.org/p/AcPUAS0QMj

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇