在golang中XML序列化时,如果字段使用如下的标记 “a>b>c”,给字段添加omitempty,只能忽略 c 字段,并不能忽略父级元素 b,c。
看如下例子:
func main() {
type Room struct {
Name string `xml:"name,attr"`
}
type Hotel struct {
XMLName xml.Name `xml:"hotel"`
Name string `xml:"name,attr,omitempty"`
Rooms []*Room `xml:"rooms>room,omitempty"`
}
hotel := Hotel{}
data, _ := xml.Marshal(hotel)
fmt.Println(string(data))
}
输出结果是
<hotel><rooms></rooms></hotel>
此时父级元素rooms数组依然被输出,如果要忽略父级元素,解决办法是使用指针,这里使用Room数组的指针。
func main() {
type Room struct {
Name string `xml:"name,attr"`
}
type Hotel struct {
XMLName xml.Name `xml:"hotel"`
Name string `xml:"name,attr,omitempty"`
Rooms *[]*Room `xml:"rooms>room,omitempty"`
}
hotel := Hotel{}
data, _ := xml.Marshal(hotel)
fmt.Println(string(data))
}
输出结果如下,父级元素rooms数组被忽略了。
<hotel></hotel>