0

来自中文源,使用时生成cdata输出xml.Marshal(),我可以:

package main

import (
    "encoding/xml"
    "fmt"
    "time"
)

type TextMsg struct {
    XMLName      xml.Name `xml:"xml"`
    ToUserName   CDATA
    FromUserName CDATA
    CreateTime   int64
    MsgType      CDATA
    Content      CDATA
}

type CDATA struct {
    Text string `xml:",cdata"`
}

func main() {
    msg := TextMsg{
        ToUserName:   CDATA{"userId"},
        FromUserName: CDATA{"appId"},
        CreateTime:   time.Now().Unix(),
        MsgType:      CDATA{"text"},
        Content:      CDATA{"some message like <hello>"}}

    b, _ := xml.MarshalIndent(msg, "", "    ")
    fmt.Println(string(b))
}

但是,如果我想同时添加.omitempty标签,我尝试将TextMsg结构更改为:

type TextMsg struct {
    XMLName      xml.Name `xml:"xml"`
    ToUserName   CDATA `xml:",omitempty"`
    FromUserName CDATA `xml:",omitempty"`
    CreateTime   int64 `xml:",omitempty"`
    MsgType      CDATA `xml:",omitempty"`
    Content      CDATA `xml:",omitempty"`
}

并将其更改main()为:

var msg TextMsg
msg.ToUserName = CDATA{"userId"},
msg.FromUserName: CDATA{"appId"},
msg.CreateTime:   time.Now().Unix(),

b, _ := xml.MarshalIndent(msg, "", "    ")

空的MsgTypeContent没有省略。我可以知道omitemptycdata标签一起设置的正确方法是什么吗?

4

0 回答 0