Golang XML 序列化忽略父级元素

在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>

参考

上一篇:如何设计一个基于SSM的旅游网站管理系统


下一篇:爬虫selenium框架爬取携程酒店数据