Go语言encoding/xml包支持XML解析与生成,通过结构体标签映射元素,如xml:”name”对应标签,omitempty控制空字段输出,XMLName指定根元素,MarshalIndent生成带缩进的XML并添加xml.Header,嵌套结构和属性分别用子结构体和,attr处理,字段需大写开头才能导出。

Go语言中的
encoding/xml
包提供了对XML数据的解析和生成支持,适合处理结构清晰的XML文件。下面通过一个实际示例演示如何使用该包进行XML的读取与写入。
定义结构体映射XML
要解析XML,需先定义Go结构体,并使用标签说明字段与XML元素的对应关系。
type Person struct { XMLName xml.Name `xml:"person"` Name string `xml:"name"` Age int `xml:"age"` Email string `xml:"email,omitempty"`}
说明:
XMLName
字段用于指定根元素名称,可选。
xml:"name"
表示该字段对应XML中的
标签。
omitempty
表示当字段为空时,序列化时不输出该标签。
解析XML文件
从字符串或文件中读取XML内容并反序列化为结构体。
立即学习“go语言免费学习笔记(深入)”;
func parseXML() { data := ` Alice 30 alice@example.com` var person Person err := xml.Unmarshal([]byte(data), &person) if err != nil { log.Fatal(err) } fmt.Printf("Name: %s, Age: %d, Email: %sn", person.Name, person.Age, person.Email)}
运行后输出:
Name: Alice, Age: 30, Email: alice@example.com
生成XML文件
将结构体数据序列化为XML格式输出。
func generateXML() { person := Person{ Name: "Bob", Age: 25, Email: "bob@example.com", } output, err := xml.MarshalIndent(person, "", " ") if err != nil { log.Fatal(err) } fmt.Println(xml.Header + string(output))}
说明:
xml.MarshalIndent
生成带缩进的格式化XML。
xml.Header
常量是
,建议手动添加。
处理嵌套结构和属性
XML常包含嵌套元素和属性,结构体可通过嵌套字段和特殊标签处理。
type Address struct { City string `xml:"city"` State string `xml:"state,attr"` // 属性}type Person struct { XMLName xml.Name `xml:"person"` Name string `xml:"name"` Age int `xml:"age"` Addr Address `xml:"address"`}
对应XML示例:
Charlie 35 Los Angeles
其中
state="CA"
被映射到
State
字段。
基本上就这些。encoding/xml在大多数场景下够用,只要结构明确,解析和生成都很直接。注意字段必须可导出(大写开头),否则无法被序列化。不复杂但容易忽略。
以上就是Golang使用encoding/xml处理XML文件示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1406939.html
微信扫一扫
支付宝扫一扫