如何向 Go 中的元素添加 XML 属性?
How to add an XML attribute to an element in Go?
我在 Go 中使用 encoding/xml 包和 Encoder example code。
虽然我能够生成可行的 XML,但我无法添加我需要的所有属性。
例如,让我们使用温度报告的概念。我需要的是这样的:
<environment>
<temperature type="float" units="c">-11.3</temperature>
</environment>
我的结构如下所示:
type climate struct {
XMLName xml.Name `xml:"environment"`
Temperature string `xml:"temperature"`
Type string `xml:"type,attr"`
Units string `xml:"unit,attr"`
}
我最终得到的结果是这样的:
<environment type="float" unit="c">
<temperature>-11.3</temperature>
</environment>
My example code in the Go Playground
如何设置结构标签的格式以将属性放入正确的元素中?
您想要的 XML 有 2 个元素:<environment>
和 <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"`
}
正在测试:
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)
}
它产生所需的输出(在 Go Playground 上尝试):
<environment>
<temperature type="float" unit="c">-11.3</temperature>
</environment>
请注意,如果您使用 ",innerxml"
标记告诉编码器逐字写入值,而不遵循通常的编组过程,您会得到相同的结果:
type temperature struct {
Temperature string `xml:",innerxml"`
Type string `xml:"type,attr"`
Units string `xml:"unit,attr"`
}
输出相同。在 Go Playground.
上试试这个
我在 Go 中使用 encoding/xml 包和 Encoder example code。
虽然我能够生成可行的 XML,但我无法添加我需要的所有属性。
例如,让我们使用温度报告的概念。我需要的是这样的:
<environment>
<temperature type="float" units="c">-11.3</temperature>
</environment>
我的结构如下所示:
type climate struct {
XMLName xml.Name `xml:"environment"`
Temperature string `xml:"temperature"`
Type string `xml:"type,attr"`
Units string `xml:"unit,attr"`
}
我最终得到的结果是这样的:
<environment type="float" unit="c">
<temperature>-11.3</temperature>
</environment>
My example code in the Go Playground
如何设置结构标签的格式以将属性放入正确的元素中?
您想要的 XML 有 2 个元素:<environment>
和 <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"`
}
正在测试:
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)
}
它产生所需的输出(在 Go Playground 上尝试):
<environment>
<temperature type="float" unit="c">-11.3</temperature>
</environment>
请注意,如果您使用 ",innerxml"
标记告诉编码器逐字写入值,而不遵循通常的编组过程,您会得到相同的结果:
type temperature struct {
Temperature string `xml:",innerxml"`
Type string `xml:"type,attr"`
Units string `xml:"unit,attr"`
}
输出相同。在 Go Playground.
上试试这个