猿问

在自定义 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


aluckdog
浏览 196回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答