gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:07:00 30 4
gpt4 key购买 nike

我有以下结构:

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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com