func Encode(),对 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)
}

有没有办法不对字段消息的值进行编码。我不想编码。 这是结果:

<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,这不是你想要的。你现在拥有的正是你想要的。

相关内容

最新更新