Xev*_*ous 4 xml struct marshalling go
我在 Go 中使用 encoding/xml 包和Encoder 示例代码。
虽然我能够生成可行的 XML,但我无法添加我需要的所有属性。
例如,让我们使用温度报告的概念。我需要的是这样的:
<environment>
<temperature type="float" units="c">-11.3</temperature>
</environment>
Run Code Online (Sandbox Code Playgroud)
我的结构是这样的:
type climate struct {
XMLName xml.Name `xml:"environment"`
Temperature string `xml:"temperature"`
Type string `xml:"type,attr"`
Units string `xml:"unit,attr"`
}
Run Code Online (Sandbox Code Playgroud)
我最终得到的是这样的:
<environment type="float" unit="c">
<temperature>-11.3</temperature>
</environment>
Run Code Online (Sandbox Code Playgroud)
如何格式化结构标签以将属性放在正确的元素中?
您想要的 XML 有 2 个元素:<environment>and <temperature>,因此您应该有 2 种类型(结构)来对它们进行建模。并且您可以使用标记",chardata"告诉编码器将字段的值写为字符数据而不是 XML 元素。
type environment struct {
Temperature temperature `xml:"temperature"`
}
type temperature struct {
Temperature string `xml:",chardata"`
Type string `xml:"type,attr"`
Units string `xml:"unit,attr"`
}
Run Code Online (Sandbox Code Playgroud)
测试它:
x := &environment{
Temperature: temperature{Temperature: "-11.3", Type: "float", Units: "c"},
}
enc := xml.NewEncoder(os.Stdout)
enc.Indent("", " ")
if err := enc.Encode(x); err != nil {
fmt.Printf("error: %v\n", err)
}
Run Code Online (Sandbox Code Playgroud)
它产生所需的输出(在Go Playground上尝试):
<environment>
<temperature type="float" unit="c">-11.3</temperature>
</environment>
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用",innerxml"告诉编码器逐字写入值的标签,您会得到相同的结果,而不受通常的编组过程的约束:
type temperature struct {
Temperature string `xml:",innerxml"`
Type string `xml:"type,attr"`
Units string `xml:"unit,attr"`
}
Run Code Online (Sandbox Code Playgroud)
输出是一样的。在Go Playground上试试这个。
| 归档时间: |
|
| 查看次数: |
3055 次 |
| 最近记录: |