不要编码HTML实体的情况下进行Go XML编组

huangapple go评论83阅读模式
英文:

Go XML marshalling without encoding HTML entities

问题

我想将一个结构体编组成XML,但是不编码特殊的HTML实体。请参考这个例子:

http://play.golang.org/p/7NOhOTwlHr

字符串 test&abc 被转换成了 test&abc,但是我希望它保持为 test&abc

英文:

I'd like to marshal a struct into XML, but without encoding special HTML-entities. See this example:

http://play.golang.org/p/7NOhOTwlHr

The string test&abc gets converted to test&abc, but I'd like it to stay test&abc

答案1

得分: 14

你可以像示例中所示使用标签",innerxml"。这里解释了",innerxml"使得unmarshal将"原始XML数据分配给它"。但它也可以很好地与Marshal一起使用,避免了字符串格式化。

http://play.golang.org/p/z8JQjRdbV4

英文:

You can use the tag ",innerxml" as show in the example. Here it explains that ",innerxml" makes unmarshal "assign raw XML data to it". But it also work well with Marshal avoiding the string formating.

http://play.golang.org/p/z8JQjRdbV4

答案2

得分: 1

XML规范中,通过规则对和号进行转义。无法在标准的encoding/xml包的输出中禁用转义。

(HTML和XML中的和号转义共享自SGML的共同遗产,但每个都有单独的规范。它们之间没有派生或相互引用的关系)。

英文:

The ampersand is escaped using the rules in the XML specification. It is not possible to disable escaping in the output of the standard encoding/xml package.

(Ampersand escaping in HTML and XML shares a common heritage from SGML, but each is specified separately. One does not derive from or reference the other).

答案3

得分: 0

你可以使用这个技巧:

 data, err = xml.Marshal(toMarshal)
 data = bytes.Replace(data, []byte("&"), []byte("&"), -1)
 fmt.Println(string(data))

另外,你还可以使用> <,...

英文:

You can use this trick:

 data, err = xml.Marshal(toMarshal)
 data = bytes.Replace(data, []byte("&"), []byte("&"), -1)
 fmt.Println(string(data))

Also you can use > < ,...

huangapple
  • 本文由 发表于 2014年9月30日 03:27:57
  • 转载请务必保留本文链接:https://go.coder-hub.com/26107384.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定