全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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

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(`Alice30`)
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"` // 自动收集所有  节点
}
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))
// 输出:
// 
//   Bob
//   25
// 

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

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


# go  # golang  # go语言  # 编码  # 字节  # 配置文件  # xml解析  # String  # 命名空间  # xml  # 字符串  # 结构体  # int  # Struct 


相关文章: 如何在阿里云服务器自主搭建网站?  建站之星安装模板失败:服务器环境不兼容?  高防服务器如何保障网站安全无虞?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  小型网站建站如何选择虚拟主机?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  Python文件管理规范_工程实践说明【指导】  内部网站制作流程,如何建立公司内部网站?  C++如何使用std::optional?(处理可选值)  建站之星安装需要哪些步骤及注意事项?  如何高效利用亚马逊云主机搭建企业网站?  建站10G流量真的够用吗?如何应对访问高峰?  如何在阿里云域名上完成建站全流程?  建站之星各版本价格是多少?  ,柠檬视频怎样兑换vip?  建站主机选择指南:服务器配置与SEO优化实战技巧  北京建设网站制作公司,北京古代建筑博物馆预约官网?  文字头像制作网站推荐软件,醒图能自动配文字吗?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  想学网站制作怎么学,建立一个网站要花费多少?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  建站之星好吗?新手能否轻松上手建站?  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  如何用景安虚拟主机手机版绑定域名建站?  如何通过服务器快速搭建网站?完整步骤解析  建站主机选购指南:核心配置与性价比推荐解析  佛山网站制作系统,佛山企业变更地址网上办理步骤?  IOS倒计时设置UIButton标题title的抖动问题  制作宣传网站的软件,小红书可以宣传网站吗?  香港服务器租用费用高吗?如何避免常见误区?  如何在建站之星绑定自定义域名?  如何在云主机上快速搭建网站?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  太平洋网站制作公司,网络用语太平洋是什么意思?  清除minerd进程的简单方法  昆明高端网站制作公司,昆明公租房申请网上登录入口?  如何在建站主机中优化服务器配置?  建站org新手必看:2024最新搭建流程与模板选择技巧  建站之星安装提示数据库无法连接如何解决?  建站168自助建站系统:快速模板定制与SEO优化指南  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  模具网站制作流程,如何找模具客户?  如何通过VPS建站无需域名直接访问?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  制作网站的公司有哪些,做一个公司网站要多少钱?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  大型企业网站制作流程,做网站需要注册公司吗? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。