Go语言encoding/xml包通过结构体标签实现XML编解码,支持解析与生成。需定义可导出字段的结构体,用xml标签映射元素和属性,如xml:”name”对应节点名,attr表示属性,chardata获取文本内容,可用xml.Unmarshal解析数据,xml.MarshalIndent生成格式化XML,结合XMLName、切片和嵌套结构处理复杂结构。

Go语言的encoding/xml包提供了对XML数据的编解码支持,适合处理结构清晰的XML内容。使用它,你可以将XML解析为结构体,也可以将结构体序列化为XML字符串。整个过程依赖标签(struct tags)来映射字段。
定义结构体映射XML元素
要解析XML,先根据数据结构定义对应的Go结构体。通过xml标签控制字段与XML节点的对应关系。
注意:结构体字段必须是可导出的(即首字母大写),否则xml包无法访问。
示例XML:
Alice 30 Beijing
对应的结构体:
立即学习“go语言免费学习笔记(深入)”;
type Person struct { XMLName xml.Name `xml:"person"` Name string `xml:"name"` Age int `xml:"age"` City string `xml:"city"`}
XMLName字段用于指定根元素名称,不是必需的,但有助于反序列化时匹配。
解析XML字符串或文件
使用xml.Unmarshal将XML数据解析到结构体中。
示例代码:
data := ` Alice 30 Beijing`var p Personerr := xml.Unmarshal([]byte(data), &p)if err != nil { log.Fatal(err)}fmt.Printf("%+vn", p)
输出:
{XMLName:{Space: Local:person} Name:Alice Age:30 City:Beijing}
若从文件读取,可用ioutil.ReadFile或os.Open配合xml.NewDecoder逐个解析。
使用xml.NewDecoder读取文件示例:
动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
508 查看详情
file, err := os.Open("person.xml")if err != nil { log.Fatal(err)}defer file.Close()var p Persondecoder := xml.NewDecoder(file)err = decoder.Decode(&p)if err != nil { log.Fatal(err)}
处理属性和嵌套结构
XML属性用attr标签标识,嵌套元素则通过嵌套结构体表示。
带属性的XML示例:
alice@example.com
对应结构体:
type Person struct { XMLName xml.Name `xml:"person"` ID string `xml:"id,attr"` Active bool `xml:"active,attr"` Contact Contact `xml:"contact"`}type Contact struct { Type string `xml:"type,attr"` Value string `xml:",chardata"`}
其中chardata表示该字段应填充XML元素的文本内容。
解析后,Contact.Value会得到alice@example.com。
生成XML输出
使用xml.MarshalIndent或xml.Marshal将结构体转换为XML。
示例:
p := Person{ ID: "123", Active: true, Contact: Contact{ Type: "email", Value: "alice@example.com", },}output, err := xml.MarshalIndent(p, "", " ")if err != nil { log.Fatal(err)}fmt.Println(xml.Header + string(output))
xml.Header通常为,可手动添加。
输出:
alice@example.com
常见技巧:忽略字段:使用xml:"-" 处理命名空间:在标签中写xml:"ns uri person" 切片处理重复元素:xml:"item"自动匹配多个同名节点 使用interface{}或xml.Token处理不规则结构基本上就这些。熟练掌握结构体标签和数据类型映射,就能高效处理大多数XML场景。
以上就是如何使用Golang encoding/xml处理XML数据的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1134911.html
微信扫一扫
支付宝扫一扫