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

问题描述 投票:0回答:1

这是代码:

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>
xml string go marshalling
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.