新闻中心

在Go语言中如何解析XML,encoding/xml包怎么使用?

2025-12-03
浏览次数:
返回列表
Go语言通过encoding/xml包支持XML解析与生成,可将XML解码为结构体或编码为XML,需用xml标签映射字段,支持属性、嵌套及切片,常用Unmarshal/Decode和MarshalIndent函数。

在go语言中如何解析xml,encoding/xml包怎么使用?

Go语言通过标准库中的encoding/xml包提供了对XML的解析和生成支持。你可以将XML数据解码为结构体,也可以将结构体编码为XML格式。使用起来简洁高效,适合处理配置文件、API响应等场景。

定义结构体映射XML

要解析XML,先定义一个Go结构体,并使用xml标签来指定字段与XML元素的对应关系。

例如,有如下XML内容:


  Alice
  30
  Beijing

对应的结构体可以这样写:

type Person struct {
  Name string `xml:"name"`
  Age int `xml:"age"`
  City string `xml:"city"`
}

解析XML字符串或文件

使用xml.Unmarshal函数将XML数据解析到结构体中。

data := `Alice30Beijing`
var person Person
err := xml.Unmarshal([]byte(data), &person)
if err != nil {
  log.Fatal(err)
}
fmt.Printf("%+v\n", person)

输出:{Name:Alice Age:30 City:Beijing}

如果是从文件读取:

file, err := os.Open("person.xml")
if err != nil {
  log.Fatal(err)
}
defer file.Close()

decoder := xml.NewDecoder(file)
err = decoder.Decode(&person)
if err != nil {
  log.Fatal(err)
}

处理属性和嵌套结构

XML属性用attr标签标识,嵌套元素则用结构体嵌套表示。

Remover Remover

几秒钟去除图中不需要的元素

Remover 304 查看详情 Remover

比如这个XML:


  Bob
  ail>bob@example.com

结构体可以定义为:

type Person struct {
  ID string `xml:"id,attr"`
  Name string `xml:"name"`
  Contact struct {
    Email string `xml:"email"`
  } `xml:"contact"`
}

如果XML中有多个同名子元素(如多个<item></item>),可以用切片接收:

type Items struct {
  Item []string `xml:"item"`
}

生成XML(序列化)

使用xml.MarshalIndentxml.Marshal将结构体转为XML。

person := Person{
  ID: "456",
  Name: "Charlie",
  Contact: struct{ Email string }{Email: "charlie@example.com"},
}

output, err := xml.MarshalIndent(person, "", " ")
if err != nil {
  log.Fatal(err)
}
fmt.Println(string(output))

输出结果会是格式化后的XML文本。

注意:生成时不会自动添加XML声明(如<?xml version="1.0" encoding="UTF-8"?>),需要手动写入。

基本上就这些。掌握结构体标签、Unmarshal/Decode、Marshal的基本用法,就能应对大多数XML处理需求。不复杂但容易忽略细节,比如大小写、字段导出、标签拼写等。

以上就是在Go语言中如何解析XML,encoding/xml包怎么使用?的详细内容,更多请关注其它相关文章!


# 就能  # 槐荫区抖音seo排名  # seo优化怎么描述  # 济南品牌关键词排名  # 阜阳区域seo推广公司  # 威远无花果营销推广方案  # 企业营销推广比较便宜  # 延庆网站推广价格  # 佛山网站推广seo费用  # 商业综合体营销推广方案  # 网站推广主要做的工作  # 中有  # 可以用  # 不需要  # go语言  # 你可以  # 数据交换  # 它在  # 很重要  # 多个  # 标准库  # xml处理  # xml解析  # 配置文件  # ai  # 编码  # go  # xml 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Go语言中JSON数据解码与字段访问指南  R星幕后开发视频泄露 包含《GTA6》等多款大作  单射、满射与双射的关系 一文理清所有逻辑  Win11如何开启讲述人功能 Win11屏幕阅读器(讲述人)开启与关闭【教程】  蛙漫官方正版入口 蛙漫网页在线全集免费观看  AngularJS $http POST请求数据传递与Go后端接收实践  163邮箱官方主页登录 直达网易邮箱登录核心页面  Angular响应式表单:实现提交后表单及按钮的禁用与只读化  PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比  Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达  Win11截图该按哪些键 Win11截屏完整流程解析【教程】  大象笔记网页版入口 印象笔记网页版登录入口  如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧  b站如何看历史记录_b站观看历史找回方法  漫蛙2在线漫画入口 漫蛙正版漫画网页版直达  AO3访问入口汇总 AO3网页版同人作品一键直达  qq邮箱日历功能怎么用_创建日程与会议邀请的技巧  在J*a中如何开发简易博客标签推荐系统_博客标签推荐项目实战解析  解决Python单元测试中Mock异常方法调用计数为零的问题  字由网在线版登录地址 字由网网页版安全入口  智慧团建扫码登录入口 智慧团建扫码登录入口官网版​  微信网页版登录教程_微信网页版登录入口在哪  12306选座怎么选到临时改签座_12306改签选座策略与步骤  CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题  Spring Boot内嵌服务器与J*a EE全栈特性:选择与部署策略  Gmail邮箱申请注册直达_Gmail邮箱免费注册PC版官网入口2025  漫蛙2网页版漫画入口 漫蛙漫画在线官方登录  顺丰国际快递查询 国际件官方查询入口  如何使 Jest 模拟函数默认抛出错误以提高测试效率  反效果?《战地6》免费试玩开启后玩家数不升反降  汽水音乐网页版使用入口_汽水音乐电脑版播放指南  优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践  《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情  126邮箱手机版登录官网2026_126手机邮箱免费入口最新  LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置  为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法  在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析  微信网页版官方入口教程 微信网页版网页版快速登录步骤  PyTorch模型训练效果不佳?深入剖析常见错误与调试技巧  sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南  如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流  谷歌google账号怎么注册账号 谷歌账号注册官方流程  sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统  利用5118提升短视频内容效果_5118短视频关键词优化方法  J*aScript中高效清空DOM列表元素:解决for循环中断与任务管理问题  c++如何使用chrono库处理时间_c++标准库时间与日期操作  在J*a中如何使用Stream.map转换元素_Stream映射操作解析  提升Kafka消费者健壮性:会话超时处理与消息处理语义  C#中解析不规范的HTML为XML 常见的坑与解决办法  sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置 

搜索