当前位置: 首页 > 面试题库 >

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

宋翔
2023-03-14
问题内容

我有以下结构:

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中的结束标记。这对您有用吗?它可能不是成本最低但最简单的一种。当然,您可以在下面的示例中将MarshalIndent调用替换为Marshal调用。

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))
}


 类似资料:
  • 主要内容:PCDATA - 被解析的字符数据,CDATA - (未解析)字符数据XML 文档中的所有文本均会被解析器解析。 只有 CDATA 区段中的文本会被解析器忽略。 PCDATA - 被解析的字符数据 XML 解析器通常会解析 XML 文档中所有的文本。 当某个 XML 元素被解析时,其标签之间的文本也会被解析: <message> This text is also parsed</message> 解析器之所以这么做是因为 XML 元素可包含其他元素,就像这个实例中

  • 在本章中,我们将讨论如何使用文档对象的几种方法来创建新节点。 这些方法提供了创建新元素节点,文本节点,注释节点,CDATA节节点和属性节点的范围。 如果新创建的节点已存在于元素对象中,则将其替换为新节点。 下面将通过示例演示这些操作。 1. 创建新的Element节点 方法创建一个新的元素节点。 如果元素对象中存在新创建的元素节点,则将其替换为新元素节点。 语法 使用方法的语法如下 - 其中, -

  • 问题内容: 目前,我正在用Java创建XML文件,并通过使用XSL / XSLT进行转换将其显示在JSP页面中。现在,我需要获取该XML文件并在PDF中显示相同的信息。有什么办法可以通过使用某种XSL文件来做到这一点? 我已经看过iText Java-PDF库,但是找不到任何将其用于XML和样式表的方法。 任何帮助将不胜感激。提前致谢! 问题答案: 您可以使用XSL格式对象。这里有一些很好的文章,

  • 本文向大家介绍xml CDATA部分,包括了xml CDATA部分的使用技巧和注意事项,需要的朋友参考一下 示例 包含特殊字符的文本的较长部分可以使用CDATA节进行转义。CDATA节只能出现在元素内容中。 CDATA节不能包含序列,]]>因为它结束了它。

  • 我得到xml格式的响应,数据在xml节点的cData部分内。现在当我试图提取节点值,然后用cdata文本获取值。 我如何解析它? xml: 我使用代码来获取整个列表,但我只需要获取特定的节点 上面的代码列出了所有的cdata值... 我只需要从上面的xml中获取dbid、isdb、mydb值

  • 我有一个这样的xml: 我正在使用simplexml_load_string将其解析为SimpleXmlElement。然后我像这样得到我的节点 我需要处理简单的超文本标记语言,例如: