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

func Encode(), encoding all part of xml

这是代码:

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

有没有什么方法可以让 message 字段的值不 encode.I 不编码。 这是结果:

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

encoding/xml 的任务是生成有效 XML 文档。转义 <> 字符对于有效的 XML 是必须的。别担心,<message> 的内容将是 This is <myText>,但此文本必须在 XML.

的来源中显示为 This is &lt;myText&gt;

请注意,使用 xml:",innerxml" 标记值可以强制输出原始 XML 数据,如 xml.Marshal():

中所述
- a field with tag ",innerxml" is written verbatim, not subject
  to the usual marshaling procedure.

像这样:

type rawxml struct {
    Data string `xml:",innerxml"`
}
type body struct {
    Message rawxml `xml:"message"`
}
myXml := body{
    Message: rawxml{"This is <myText>"},
}

这将输出(在 Go Playground 上尝试):

<body>
  <message>This is <myText></message>
</body>

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