xml - 如何使用 go 创建 xml 的 CDATA 节点?

标签 xml go cdata

我有以下结构:

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以最低的成本?

最佳答案

@spirit-zhang:从 Go 1.6 开始,你现在可以使用 ,cdata 标签了:

package main

import (
    "fmt"
    "encoding/xml"
)

type RootElement struct {
    XMLName xml.Name `xml:"root"`
    Summary *Summary `xml:"summary"`
}

type Summary struct {
    XMLName xml.Name `xml:"summary"`
    Text    string   `xml:",cdata"`
}

func main() {

    cdata := `<a href="http://example.org">My Example Website</a>`
    v := RootElement{
        Summary: &Summary{
            Text: cdata,
        },
    }

    b, err := xml.MarshalIndent(v, "", "  ")
    if err != nil {
        fmt.Println("oopsie:", err)
        return
    }
    fmt.Println(string(b))
}

输出:

<root>
  <summary><![CDATA[<a href="http://example.org">My Example Website</a>]]></summary>
</root>

Playground :https://play.golang.org/p/xRn6fe0ilj

规则基本上是:1)必须是,cdata,不能指定节点名2)使用xml.Name来命名节点随心所欲。

这就是如今大多数 Go 1.6+ 和 XML 的自定义内容的工作方式(带有 xml.Name 的嵌入式结构)。


编辑:添加 xml:"summary"RootElement 结构,所以你也可以 Unmarshal xml 回到结构反向(需要在两个地方都设置)。

关于xml - 如何使用 go 创建 xml 的 CDATA 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14191596/

相关文章:

sql-server - 如何在 SQL XML 中使用 CDATA

java - 在 XmlObject 中添加数据

python - 您是否可以仅修改 XML 文件中的文本字符串并仍然保持 .docx 封装的完整性和功能?

android - 如何在 ImageView 中加载随机图像? (安卓)

linux - 从Golang更改Linux用户密码无效

node.js - 如何在Windows Server上从Golang或Node.js运行Excel Application?

java - 使用 Java 将 HTML 符号和 HTML 名称转换为 HTML 数字

java - IndentingXMLStreamWriter.java 的替代方案

Golang Gin : serving JSON and static files in the same app

xml - 使用 XSLT 转换 XML 并保留 CDATA(在 Ruby 中)