我有以下结构体:
- type XMLProduct struct {
- XMLName xml.Name `xml:"row"`
- ProductId string `xml:"product_id"`
- ProductName string `xml:"product_name"`
- OriginalPrice string `xml:"original_price"`
- BargainPrice string `xml:"bargain_price"`
- TotalReviewCount int `xml:"total_review_count"`
- Averagescore float64 `xml:"average_score"`
- }
而且我使用encoding / xml进行编码,然后将其显示在网页上.
ProductName字段需要用<![CDATA []]括起来.但是如果我把它写成<![CDATA [p.ProductName]]>和>将被翻译成& lt;和& gt;
如何以最低的成本创建CDATA?
正如@Tomalak所说,不支持输出CDATA.
你可以写![CDATA [作为xml标签,稍后从结果xml替换结束标签.这会为你工作吗?它可能不是最低成本的,但最简单的.当然,您可以在下面的示例中使用Marshal调用来替换MarshalIndent调用.
http://play.golang.org/p/2-u7H85-wn
- package main
- import (
- "encoding/xml"
- "fmt"
- "bytes"
- )
- type XMLProduct struct {
- XMLName xml.Name `xml:"row"`
- ProductId string `xml:"product_id"`
- ProductName string `xml:"![CDATA["`
- OriginalPrice string `xml:"original_price"`
- BargainPrice string `xml:"bargain_price"`
- TotalReviewCount int `xml:"total_review_count"`
- Averagescore float64 `xml:"average_score"`
- }
- func main() {
- prod := XMLProduct{
- ProductId: "ProductId",ProductName: "ProductName",OriginalPrice: "OriginalPrice",BargainPrice: "BargainPrice",TotalReviewCount: 20,Averagescore: 2.1}
- out,err := xml.MarshalIndent(prod," "," ")
- if err != nil {
- fmt.Printf("error: %v",err)
- return
- }
- out = bytes.Replace(out,[]byte("<![CDATA[>"),[]byte("<![CDATA["),-1)
- out = bytes.Replace(out,[]byte("</![CDATA[>"),[]byte("]]>"),-1)
- fmt.Println(string(out))
- }