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,先根据数据结构定义对应的Go结构体。通过xml标签控制字段与XML节点的对应关系。
xml包无法访问。
示例XML:
<person> <name>Alice</name> <age>30</age> <city>Beijing</city> </person>
对应的结构体:
立即学习“go语言免费学习笔记(深入)”;
type Person struct {
XMLName xml.Name `xml:"person"`
Name string `xml:"name"`
Age int `xml:"age"`
City string `xml:"city"`
}
XMLName字段用于指定根元素名称,不是必需的,但有助于反序列化时匹配。
使用xml.Unmarshal将XML数据解析到结构体中。
示例代码:
data := `
<person>
<name>Alice</name>
<age>30</age>
<city>Beijing</city>
</person>`
var p Person
err := xml.Unmarshal([]byte(data), &p)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", p)
输出:
{XMLName:{Space: Local:person} Name:Alice Age:30 City:Beijing}
若从文件读取,可用ioutil.ReadFile或os.Open配合xml.NewDecoder逐个解析。
使用xml.NewDecoder读取文件示例:
动态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 Person
decoder := xml.NewDecoder(file)
err = decoder.Decode(&p)
if err != nil {
log.Fatal(err)
}
XML属性用attr标签标识,嵌套元素则通过嵌套结构体表示。
带属性的XML示例:
<person id="123" active="true"> <contact type="email">alice@example.com</contact> </person>
对应结构体:
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.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通常为<?xml version="1.0" encoding="UTF-8"?>,可手动添加。
输出:
<?xml version="1.0" encoding="UTF-8"?> <person id="123" active="true"> <contact type="email">alice@example.com</contact> </person>
xml:"-"
xml:"ns uri person"
xml:"item"自动匹配多个同名节点interface{}或xml.Token处理不规则结构以上就是如何使用Golang encoding/xml处理XML数据的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号