Golang XML 添加CDATA

Golang XML 添加CDATA

Posted by Ricky on November 6, 2018

前言

微信的推送都是xml的消息体,在我们同步响应微信消息的时候,也需要返回xml的格式,并且,由于我们响应的内容五花八门 有时候就会带上<br/> 之类的html字符,但是golang在编码成xml的时候会转义成实体字符 alt text

google一圈之后,发现大家的做法都是增加一个字段叫做CDATA的结构体
  • 比如我之前想给结构体Text加CDATA
type Text struct {
	Content string `json:"Content"`
}

  • 直接在后面加个json tag是无法实现的,除非自己实现了json那一套,能力有限就没有那么写
  • 那么我就按照网上的方式重新定义了一下结构体
type Text struct {
	Content CDATA `xml:"Content" json:"Content"`
}


type MpText struct {
	Content string `json:"Content"`
}


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


  • 先将json格式的数据 解析到MpText的结构体里面,这是完全没有问题的
  • 然后将MpText.Content赋值给Text的CDATA.Value
  • 这里的CDATA的xml tag一定要是小写,我大写的话会出现下图1
  • 逗号也不能省略,否则会出现下图2
  • 最终实现之后如图3
<xml>
    <ToUserName>
        <![CDATA[oIawIj6HjtMakoO42ghbHJeAIBEY]]>
    </ToUserName>
    <FromUserName>
        <![CDATA[gh_ba43c0866a80]]>
    </FromUserName>
    <CreateTime>1541489253</CreateTime>
    <MsgType>
        <![CDATA[text]]>
    </MsgType>
    <Content>
        <![CDATA[1111<br />2222<br />3333]]>
    </Content>
</xml>

alt text alt text alt text