全网整合营销服务商

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

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

如何使用Golang encoding/xml解析XML数据_序列化和反序列化示例

Go语言encoding/xml包支持XML序列化与反序列化,核心是xml标签用法:字段映射元素名、,attr表属性、,chardata捕获文本、,any捕获未知子元素、,omitempty忽略零值。

Go 语言的 encoding/xml 包提供了简洁、高效的 XML 序列化(marshal)和反序列化(unmarshal)能力,无需第三方依赖。核心在于结构体标签 xml: 的正确使用,以及理解默认行为与常见陷阱。

定义结构体并映射 XML 元素

XML 解析的关键是让 Go 结构体字段与 XML 节点一一对应。通过 xml 标签控制映射方式:

  • 字段名默认映射为同名小写 XML 元素名(如 Name
  • xml:"name" 强制指定元素名
  • xml:"name,attr" 表示该字段解析为 XML 属性(attribute)
  • xml:",chardata" 捕获文本内容(如 Hello 中的 Hello
  • xml:",any" 捕获未知子元素(需配合自定义 UnmarshalXML)
  • xml:",omitempty" 序列化时忽略零值字段

示例结构体:

type Person struct {
  XMLName xml.Name `xml:"person"`
  ID int `xml:"id,attr"`
  Name string `xml:"name"`
  Email string `xml:"contact>email"`
  Age int `xml:"age,omitempty"`
  Tags []string `xml:"tag"`
}

反序列化:从 XML 字符串或 Reader 解析为结构体

使用 xml.Unmarshal 将 XML 数据转为 Go 结构体。支持 []byteio.Reader(如 strings.NewReader 或文件流):

xmlData := `Alicea@example.comdevgo`
var p Person
err := xml.Unmarshal([]byte(xmlData), &p)
if err != nil {
  log.Fatal(err)
}
// p.ID == 123, p.Name == "Alice", p.Tags == []string{"dev", "go"}

序列化:将结构体转为格式化 XML 字符串

xml.MarshalIndent 生成缩进可读的 XML;xml.Marshal 输出紧凑格式:

p := Person{
  ID: 456,
  Name: "Bob",
  Email: "b@example.com",
  Tags: []string{"ops", "cloud"},
}
data, err := xml.MarshalIndent(p, "", " ")
if err != nil {
  log.Fatal(err)
}
fmt.Println(string(data))
// 输出含缩进的 XML,根元素为

处理嵌套、属性、注释与命名空间

复杂 XML 需注意细节:

  • 嵌套结构用匿名或具名结构体字段,路径用 xml:"parent>child" 或分层结构体
  • XML 属性必须显式声明 ,attr,否则会被忽略
  • 注释()默认不解析;如需捕获,需实现 UnmarshalXML 方法
  • 命名空间(如 )可通过 xml.Name.Space 访问,或在结构体字段中用 xml:"rss xmlns,attr" 提取
  • 空元素()可映射为 bool 类型字段,但需确保 XML 值为 "true"/"false" 或按需自定义解析

不复杂但容易忽略


# go  # golang  # go语言  # ai  # xml解析  # String  # if  # 命名空间  # xml  # 字符串  # 结构体  # bool  # int  # Struct  # Attribute 


相关文章: PHP正则匹配日期和时间(时间戳转换)的实例代码  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  如何在建站之星绑定自定义域名?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  微信小程序制作网站有哪些,微信小程序需要做网站吗?  小型网站建站如何选择虚拟主机?  如何彻底删除建站之星生成的Banner?  行程制作网站有哪些,第三方机票电子行程单怎么开?  如何在Golang中指定模块版本_使用go.mod控制版本号  代购小票制作网站有哪些,购物小票的简要说明?  如何通过IIS搭建网站并配置访问权限?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  电商网站制作价格怎么算,网上拍卖流程以及规则?  建站之星安装后界面空白如何解决?  如何快速使用云服务器搭建个人网站?  实例解析angularjs的filter过滤器  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  在线制作视频网站免费,都有哪些好的动漫网站?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  C++时间戳转换成日期时间的步骤和示例代码  详解jQuery停止动画——stop()方法的使用  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  C++中引用和指针有什么区别?(代码说明)  如何用虚拟主机快速搭建网站?详细步骤解析  音响网站制作视频教程,隆霸音响官方网站?  宝塔新建站点为何无法访问?如何排查?  ,石家庄四十八中学官网?  用v-html解决Vue.js渲染中html标签不被解析的问题  如何在Windows环境下新建FTP站点并设置权限?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  制作农业网站的软件,比较好的农业网站推荐一下?  如何在云主机上快速搭建网站?  常州自助建站费用包含哪些项目?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  建站之星图片链接生成指南:自助建站与智能设计教程  如何高效配置IIS服务器搭建网站?  宝塔新建站点报错如何解决?  如何选择高效响应式自助建站源码系统?  如何选择可靠的免备案建站服务器?  寿县云建站:智能SEO优化与多行业模板快速上线指南  如何确保西部建站助手FTP传输的安全性?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  图册素材网站设计制作软件,图册的导出方式有几种?  如何配置IIS站点权限与局域网访问?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一) 

您的项目需求

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