全网整合营销服务商

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

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

怎么用Go语言的encoding/xml包处理XML

Go的encoding/xml包通过结构体标签实现XML与Go类型的双向映射,支持属性、文本、嵌套、切片及忽略字段等特性,用Unmarshal解析、Marshal生成XML。

Go 的 encoding/xml 包是标准库中处理 XML 的核心工具,主打结构化、类型安全、简洁高效。它不提供流式解析(如 SAX)或 DOM 树操作,而是通过 Go 结构体与 XML 元素一一映射,用 xml.Unmarshal 解析,xml.Marshal 生成。

定义结构体并打上 xml 标签

XML 解析的关键是让 Go 结构体“知道”每个字段对应哪个 XML 元素或属性。靠的是结构体字段的 xml 标签:

  • xml:"name":匹配名为 name 的子元素(默认行为)
  • xml:"name,attr":匹配名为 name 的 XML 属性(如 中的 id
  • xml:",chardata":捕获元素的文本内容(如 Hello 中的 Hello
  • xml:",omitempty":序列化时若字段为空(零值),则忽略该元素或属性
  • xml:"-" :完全忽略该字段(不解析也不生成)

示例:

type Person struct {
  XMLName xml.Name `xml:"person"`
  ID int `xml:"id,attr"`
  Name string `xml:"name"`
  Age int `xml:"age"`
  Bio string `xml:"bio,omitempty"`
}

解析 XML 字符串或文件

xml.Unmarshal 将 XML 数据(字节切片或 io.Reader)解码进结构体实例:

  • 从字符串解析:先用 []byte(xmlStr) 转为字节切片
  • 从文件解析:用 os.Open 打开后传入 xml.NewDecoder,更省内存(尤其大文件)
  • 注意错误检查:解析失败通常返回 xml.SyntaxError 或字段类型不匹配等错误

简单例子:

data := `Alice30`
var p Person
err := xml.Unmarshal([]byte(data), &p)
if err != nil {
  log.Fatal(err)
}
// p.ID == 42, p.Name == "Alice", p.Age == 30

生成 XML 输出

xml.Marshal 把结构体转成 XML 字节切片,再用 string() 或写入文件:

  • 输出带缩进?用 xml.MarshalIndent,传入前缀和缩进符(如 "", " "
  • 想加 XML 声明()?需手动拼接,Marshal 不自动生成
  • 字段为 nil 指针或空 slice 时,配合 omitempty 可跳过输出
out, _ := xml.MarshalIndent(p, "", " ")
fmt.Println(xml.Header + string(out))

处理嵌套、切片和任意子元素

结构体可自然表达嵌套关系:

  • 嵌套结构体 → 对应子元素嵌套
  • 字段类型为 []Child → 自动解析多个同名子元素为切片
  • xml:",any" 捕获未知子元素(返回 []byte,需二次解析)
  • xml:",innerxml" 获取某元素内部所有原始 XML(包括子标签和文本)

例如支持多个 Library

type Library struct {
  XMLName xml.Name `xml:"library"`
  Books []Book `xml:"book"`
}
type Book struct {
  Title string `xml:"title"`
  Author string `xml:"author"`
}

基本上就这些。不需要第三方库,标准包已足够应对绝大多数 XML 场景——只要 XML 结构相对固定,且你愿意用结构体建模。


# go  # go语言  # 字节  # 工具  # 字符串解析  # 标准库  # String  # if  # xml  # 字符串  # 结构体  # int  # 指针  # Struct 


相关文章: 如何在服务器上配置二级域名建站?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  如何零成本快速生成个人自助网站?  建站之星安装后如何配置SEO及设计样式?  制作销售网站教学视频,销售网站有哪些?  如何快速搭建高效简练网站?  如何通过多用户协作模板快速搭建高效企业网站?  独立制作一个网站多少钱,建立网站需要花多少钱?  C#如何在一个XML文件中查找并替换文本内容  如何在景安云服务器上绑定域名并配置虚拟主机?  专业公司网站制作公司,用什么语言做企业网站比较好?  潮流网站制作头像软件下载,适合母子的网名有哪些?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  网站制作新手教程,新手建设一个网站需要注意些什么?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  宝塔建站助手安装配置与建站模板使用全流程解析  如何用虚拟主机快速搭建网站?详细步骤解析  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  ,巨量百应是干嘛的?  建站之星免费版是否永久可用?  javascript基本数据类型及类型检测常用方法小结  表情包在线制作网站免费,表情包怎么弄?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  建站之星3.0如何解决常见操作问题?  如何访问已购建站主机并解决登录问题?  山东网站制作公司有哪些,山东大源集团官网?  个人网站制作流程图片大全,个人网站如何注销?  七夕网站制作视频,七夕大促活动怎么报名?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  建站之星如何快速更换网站模板?  制作网页的网站有哪些,电脑上怎么做网页?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  制作网站的模板软件,网站怎么建设?  北京企业网站设计制作公司,北京铁路集团官方网站?  如何在西部数码注册域名并快速搭建网站?  如何在服务器上三步完成建站并提升流量?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  如何在腾讯云免费申请建站?  在线教育网站制作平台,山西立德教育官网?  制作网站外包平台,自动化接单网站有哪些?  如何选择高效稳定的ISP建站解决方案?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何在IIS管理器中快速创建并配置网站?  如何选择高效便捷的WAP商城建站系统?  如何设计高效校园网站?  如何配置IIS站点权限与局域网访问?  如何快速生成橙子建站落地页链接?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  免费ppt制作网站,有没有值得推荐的免费PPT网站? 

您的项目需求

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