需求
最近在参与 WavPub 的开发,在开发的过程中,需要调整 XML 的结构,因此,需要为一些字段加入 CDATA 的支持。
问题
在阅读了 eduncan911/podcast 中的代码后发现,这个包在生成 XML 的时候,使用的是 Golang 核心库中的 encoding/xml 包,而这个包在使用的时候有一个问题,你可以给其字段加入 ,cdata 来完成加入 cdata 的标签,但问题在于,他的实现是,在你的字段外部加标签,而不是内部加标签。举个例子来说,就是,如果你定义了字段为 xml:”category,cdata” 你得到的会是
<![CDATA[ somecode ]]>
Code language: HTML, XML (xml)
而非我们想要的
<category> <![CDATA[ xxx ]]> </category>
Code language: HTML, XML (xml)
实现
想要解决这个问题,就需要你在你的字段中实现一层包裹,在其自动生成的 CDATA 外层加入一层 XML ,这样就可以实现我们想要的效果,比如说我上面的效果可以通过定义一个新的 Description 的 Struct 来实现
package podcast
import "encoding/xml"
// Description represents text inputs.
type Description struct {
XMLName xml.Name `xml:"description"`
Text string `xml:",cdata"`
}
Code language: JavaScript (javascript)
然后,再在需要的地方,加入相应的引用就好
type Podcast struct {
XMLName xml.Name `xml:"channel"`
...
Description *Description
...
}
Code language: JavaScript (javascript)