func Encode(),对xml的所有部分进行编码

func Encode(),对xml的所有部分进行编码,xml,string,go,marshalling,Xml,String,Go,Marshalling,这是代码: import ( "bytes" "encoding/xml" "fmt") func main() { type body struct { Message string `xml:"message"` } myXml := body{ Message:"This is <myText>", } w := &bytes.Buffer{} enc := xml.NewEncoder(w) enc.Inde

这是代码:

import (
"bytes"
"encoding/xml"
"fmt")

func main() {
type body struct {
    Message string `xml:"message"`
}
myXml := body{
    Message:"This is <myText>",
}

    w := &bytes.Buffer{}
        enc := xml.NewEncoder(w)
        enc.Indent("", "  ")
        if err := enc.Encode(myXml); err != nil {
            panic(err)
        }
        request := w.String()
        fmt.Println(request)
    }
导入(
“字节”
“编码/xml”
“fmt”)
func main(){
类型体结构{
消息字符串`xml:“消息”`
}
myXml:=正文{
信息:“这是”,
}
w:=&bytes.Buffer{}
enc:=xml.NewEncoder(w)
附件缩进(“,”)
如果错误:=enc.Encode(myXml);错误!=nil{
恐慌(错误)
}
请求:=w.String()
fmt.Println(请求)
}
字段消息的值有没有不编码的方法。我不想编码。 这是一个结果:

<body>
  <message>This is &lt;myText&gt;</message>
</body>

这是我的文本
的任务是生成有效的XML文档。对于有效的XML,必须转义
字符。别担心,
的内容将是
这是
,但此文本必须在XML源代码中显示为
这是我的文本

请注意,使用
xml:“,innerxml”
标记值,可以强制输出原始xml数据,如下所述:

像这样:

type rawxml struct {
    Data string `xml:",innerxml"`
}
type body struct {
    Message rawxml `xml:"message"`
}
myXml := body{
    Message: rawxml{"This is <myText>"},
}
输入rawxml结构{
数据字符串'xml:,innerxml'`
}
类型体结构{
消息rawxml`xml:“消息”`
}
myXml:=正文{
消息:rawxml{“This is”},
}
这将输出(在上尝试):


这是

或者实现和使用自定义,但同样,这是无效的XML,这不是您想要的。您现在拥有的正是您想要的。

Encode()
是将一些Go值编码为XML。您已经有了一个XML,这就是为什么编码它(再次)将应用转义的原因。如果您不想这样做,只需按原样将源代码写入输出即可。我已编辑。您是否希望编码器完全忽略
消息
字段?如果是这样,请改用
`xml:“-”`
type rawxml struct {
    Data string `xml:",innerxml"`
}
type body struct {
    Message rawxml `xml:"message"`
}
myXml := body{
    Message: rawxml{"This is <myText>"},
}
<body>
  <message>This is <myText></message>
</body>