当我们使用 Gin 框架返回 xml 数据时,可以直接使用 gin 中的 xml 方法返回数据。但是此方法只适用于结构体数据,当我们需要返回已经渲染好的 xml 字符串数据就不行了。
比如当我们使用 https://github.com/gorilla/feeds 这个库生成 rss 订阅数据源的数据时,feeds 最后返回的数据为字符串
这个使用 c.xml 返回数据会引起 xml 格式错乱。
rss, err := feed.ToRss()
if err != nil {global.GL_LOG.Errorf(rss)
}
c.XML(200, rss)
数据为 xml 格式,但是渲染后数据节点丢失。
header 响应头为 xml 格式
尝试使用 c.string 返回数据
rss, err := feed.ToRss()
if err != nil {global.GL_LOG.Errorf(rss)
}
c.String(200, rss)
可以看到 xml 格式化显示正常,但是使纯字符串返回的,在一些数据 rss 订阅处理上面可能会有问题
在 gin xml 处理方法中可以看到返回数据时添加了 header 头格式标签
这个时候我们只需要在返回前添加 header 头就可以实现 xml 格式识别
正确处理 xml 字符串格式返回的方法
rss, err := feed.ToRss()
if err != nil {global.GL_LOG.Errorf(rss)
}
c.Header("Content-Type", "application/xml;charset=utf-8")
c.String(200, rss)
这样设置后返回的数据就正常了。