站点图标 星露谷值班站长

Gin中处理xml字符串非结构体数据返回

当我们使用 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)

这样设置后返回的数据就正常了。

退出移动版