我有以下结构:
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进行编码,然后将其显示在网页上。
encoding/xml
该ProductName字段必须用括起来<![CDATA[]]。但是,如果我将其写为<![CDATA[ + p.ProductName + ]]>,则<和>将转换为<和>。
ProductName
<![CDATA[]]
<![CDATA[ + p.ProductName + ]]>
<
>
<
>
如何CDATA以最低的成本创建?
CDATA
如@Tomalak所述,不支持输出CDATA。
您可能可以写![CDATA[为xml标记,以后再替换生成的xml中的结束标记。这对您有用吗?它可能不是成本最低但最简单的一种。当然,您可以在下面的示例中将MarshalIndent调用替换为Marshal调用。
![CDATA[
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)) }