首页 > 后端开发 > Golang > 正文

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

P粉602998670
发布: 2025-12-19 12:10:02
原创
707人浏览过
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<name></name>),也可显式指定:xml:"user_name"
  • 属性值用 attr:如 ID int `xml:"id,attr"` 对应 <user id="123"></user>
  • 文本内容用 chardata:如 Content string `xml:",chardata"` 捕获 <title>Hello</title> 中的 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)。

立即学习go语言免费学习笔记(深入)”;

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

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

慧中标AI标书
慧中标AI标书

慧中标AI标书是一款AI智能辅助写标书工具。

慧中标AI标书 295
查看详情 慧中标AI标书
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,再对照结构体标签逐步调试。

以上就是如何使用Golang encoding/xml解析XML数据_Golang XML编码与解析示例的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号