登录
首页 >  Golang >  Go教程

GolangXML解析教程:encoding/xml使用详解

时间:2026-02-01 08:49:35 134浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《Golang XML解析教程:encoding/xml使用示例》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

Go语言encoding/xml包支持类型安全的XML解析与序列化,通过struct tag映射字段,支持属性(attr)、文本(chardata)、切片自动收集、命名空间及Marshal/Unmarshal操作。

如何使用Golang encoding/xml解析XML数据_Golang XML编码与解析示例

Go 语言的 encoding/xml 包提供了简洁、高效且类型安全的 XML 解析与序列化能力。它不依赖外部库,原生支持结构体标签映射,适合处理配置文件、API 响应(如 RSS、SOAP)、简单数据交换等场景。

定义结构体并使用 XML 标签

解析 XML 的核心是将 XML 元素与 Go 结构体字段通过 xml struct tag 映射。标签语法为 xml:"name,attr|chardata|omitempty|any",常用选项包括:

  • 字段名匹配元素名:默认使用字段名小写形式(如 Name),也可显式指定:xml:"user_name"
  • 属性值用 attr:如 ID int `xml:"id,attr"` 对应
  • 文本内容用 chardata:如 Content string `xml:",chardata"` 捕获 Hello 中的 Hello
  • omitempty:序列化时忽略零值字段(不影响解析)
  • 嵌套结构体自动展开:无需额外 tag,子结构体对应子元素

解析 XML 字符串或文件

使用 xml.Unmarshal 将字节切片或 io.Reader 解析为结构体。注意错误检查不可省略:

data := []byte(`<user id="1001"><name>Alice</name><age>30</age></user>`)
var u User
err := xml.Unmarshal(data, &u)
if err != nil {
    log.Fatal(err)
}
// u.ID == 1001, u.Name == "Alice", u.Age == 30

从文件读取时可直接传入 *os.File 或其他 io.Reader(如 bytes.NewReader(data)http.Response.Body)。

处理多层级、重复元素与命名空间

XML 中常见列表(如多个 )可用切片接收:

type Feed struct {
    XMLName xml.Name `xml:"rss"`
    Channel   Channel  `xml:"channel"`
}
type Channel struct {
    Title string `xml:"title"`
    Items []Item `xml:"item"` // 自动收集所有 <item> 节点
}
type Item struct {
    Title   string `xml:"title"`
    Link    string `xml:"link"`
    PubDate string `xml:"pubDate"`
}

命名空间(如 xmlns:dc="http://purl.org/dc/elements/1.1/")需在 tag 中完整写出前缀,例如:Creator string `xml:"dc:creator"`。若不确定命名空间,可用 xml:",any" 捕获未知子元素(慎用,会丢失结构)。

生成 XML(编码)也很简单

xml.Marshalxml.MarshalIndent(带缩进)将结构体转为 XML 字节流:

u := User{ID: 999, Name: "Bob", Age: 25}
output, err := xml.MarshalIndent(u, "", "  ")
if err != nil {
    log.Fatal(err)
}
fmt.Println(string(output))
// 输出:
// <user id="999">
//   <name>Bob</name>
//   <age>25</age>
// </user>

注意:根结构体字段若未设置 xml:"name",默认以结构体名小写作为根元素名;若想自定义根名,可嵌套一层或使用匿名字段 + 显式 tag。

基本上就这些。Golang 的 XML 支持不复杂但容易忽略 tag 细节,尤其 attrchardata 的位置、切片自动收集机制,以及命名空间写法。实际用时建议先打印原始 XML,再对照结构体标签逐步调试。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《GolangXML解析教程:encoding/xml使用详解》文章吧,也可关注golang学习网公众号了解相关技术文章。

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>