Go语言通过encoding/xml包支持XML解析与生成,使用结构体标签映射XML元素和属性。1. 定义结构体时用xml:”name”匹配元素名,xml:”attr,attr”处理属性;2. 用xml.Unmarshal解析XML数据到结构体;3. 用xml.MarshalIndent将结构体序列化为格式化XML,并添加xml.Header输出标准XML声明。嵌套元素通过嵌套结构体处理,支持复杂结构映射。

Go 语言标准库中的 encoding/xml 包提供了对 XML 数据的解析和序列化支持,使用结构体标签(struct tags)可以方便地将 XML 文件映射到 Go 结构中,也可以将结构体数据编码为 XML。下面介绍如何使用它来解析和生成 XML 文件。
定义结构体映射 XML 元素
要解析 XML,首先要根据 XML 的结构定义对应的 Go 结构体。通过在结构体字段上使用 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 person Personerr := xml.Unmarshal([]byte(data), &person)if err != nil {
log.Fatal(err)
}fmt.Printf(“%+vn”, person)
输出:
{XMLName:{Space: Local:person} Name:Alice Age:30 City:Beijing}
如果 XML 存在于文件中,可以先读取文件内容:
file, err := os.Open(“person.xml”)
if err != nil {
log.Fatal(err)
}
defer file.Close()data, _ := io.ReadAll(file)
var person Person
xml.Unmarshal(data, &person)
处理属性和嵌套结构
XML 常包含属性(attributes),可用 attr 标签标识。
例如:
Bob
结构体可定义为:
type Person struct {
XMLName xml.Name `xml:”person”`
ID string `xml:”id,attr”`
Type string `xml:”type,attr”`
Name string `xml:”name”`
}
对于嵌套元素,结构体也可嵌套:
Charlie
Shanghai
200000
对应结构体:
type Address struct {
City string `xml:”city”`
Zip string `xml:”zip”`
}type Person struct {
XMLName xml.Name `xml:”person”`
Name string `xml:”name”`
Address Address `xml:”address”`
}
XML 序列化(生成 XML)
使用 xml.Marshal 或 xml.MarshalIndent 可将结构体转换为 XML 数据。
person := Person{
Name: “David”,
Age: 25,
City: “Guangzhou”,
}output, err := xml.MarshalIndent(person, “”, ” “)
if err != nil {
log.Fatal(err)
}fmt.Println(xml.Header + string(output))
xml.Header 是可选的 XML 声明(如 ),建议添加以保证格式正确。
输出示例:
David
25
Guangzhou
基本上就这些操作。只要结构体字段标签写对,encoding/xml 能处理大多数常见场景。
以上就是Golang如何使用 encoding/xml 解析 XML 文件_Golang XML 数据解析与序列化的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1424316.html
微信扫一扫
支付宝扫一扫