这是代码:
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 <myText></message>
</body>
encoding/xml
的使命是生成有效的XML文档。逃避<
和>
字符是有效XML的必需品。别担心,<message>
的内容将是This is <myText>
,但是这个文本必须在XML的源代码中显示为This is <myText>
。
请注意,使用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,这不是你想要的。你现在拥有的正是你想要的。