Go语言怎么解析XML Go原生库处理XML数据教程

发布时间 - 2026-01-25 00:00:00    点击率:
Go语言用encoding/xml包解析XML需定义带x

ml标签的导出结构体,通过xml.Unmarshal将字节数据转为对象;字段映射靠xml:"name,attr"等标签,嵌套结构体和切片分别处理子元素与同名列表,注意首字母大写、空元素零值及命名空间显式声明。

Go语言用encoding/xml包解析XML非常直接,不需要第三方库。核心是定义结构体并用结构标签(struct tag)映射XML元素和属性,再用xml.Unmarshal把字节数据转成Go对象。

结构体字段与XML标签对齐

XML解析的关键是让Go结构体“读懂”XML的层级和命名。字段名不重要,关键是xml标签里的值:

  • xml:"person" 表示该字段对应名为的XML元素
  • xml:"name,attr" 表示读取name="xxx"这样的属性
  • xml:",chardata" 表示读取元素的文本内容(比如25中的25
  • xml:"-" 表示忽略该字段
  • 嵌套结构体自动对应子元素;切片字段(如[]Item)可解析多个同名元素

解析简单XML示例

假设有如下XML字符串:

张三30

对应结构体写法:

type User struct {
    ID   int    `xml:"id,attr"`
    Name string `xml:"name"`
    Age  int    `xml:"age"`
}

解析代码:

data := []byte(`张三30`)
var u User
err := xml.Unmarshal(data, &u)
if err != nil {
    log.Fatal(err)
}
// u.ID == 101, u.Name == "张三", u.Age == 30

处理多层嵌套和列表

遇到......这类结构,用切片+嵌套结构体即可:

type Users struct {
    XMLName xml.Name `xml:"users"`
    List    []User   `xml:"user"`
}

type User struct {
    ID   int    `xml:"id,attr"`
    Name string `xml:"name"`
    Tags []Tag  `xml:"tag"`
}

type Tag struct {
    Name string `xml:",chardata"`
}

这样Agoxml就能完整解析。

注意常见坑点

  • 结构体字段必须是导出的(首字母大写),否则xml包无法访问
  • 如果XML有声明,不影响解析,可直接包含或忽略
  • 空元素(如)会将对应字段设为零值,不是nil;需要区分时可用指针字段(如*string
  • 命名空间(如xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance")需在结构体中显式声明xml:"xsi,attr"或用xml.Name字段捕获

基本上就这些。Go的XML解析不复杂但容易忽略大小写和导出规则,对照XML样本写好结构体标签,再调一次Unmarshal,基本就跑通了。


# go  # go语言  # 字节  # ai  # xml解析  # String  # 命名空间  # xml  # 字符串  # 结构体  # 指针  # Struct 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何解决hover在ie6中的兼容性问题  教你用AI将一段旋律扩展成一首完整的曲子  简单实现jsp分页  香港服务器如何优化才能显著提升网站加载速度?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何在景安服务器上快速搭建个人网站?  Java类加载基本过程详细介绍  公司门户网站制作流程,华为官网怎么做?  中山网站推广排名,中山信息港登录入口?  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  音乐网站服务器如何优化API响应速度?  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  Laravel怎么在Blade中安全地输出原始HTML内容  如何在橙子建站上传落地页?操作指南详解  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  html5的keygen标签为什么废弃_替代方案说明【解答】  Linux系统运维自动化项目教程_Ansible批量管理实战  郑州企业网站制作公司,郑州招聘网站有哪些?  个人网站制作流程图片大全,个人网站如何注销?  Laravel如何实现用户密码重置功能?(完整流程代码)  如何构建满足综合性能需求的优质建站方案?  高防服务器租用首荐平台,企业级优惠套餐快速部署  详解vue.js组件化开发实践  如何做网站制作流程,*游戏网站怎么搭建?  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  C++用Dijkstra(迪杰斯特拉)算法求最短路径  lovemo网页版地址 lovemo官网手机登录  如何快速搭建高效简练网站?  网站制作壁纸教程视频,电脑壁纸网站?  jQuery 常见小例汇总  Laravel如何使用.env文件管理环境变量?(最佳实践)  javascript中的try catch异常捕获机制用法分析  使用豆包 AI 辅助进行简单网页 HTML 结构设计  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  Windows Hello人脸识别突然无法使用  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  iOS中将个别页面强制横屏其他页面竖屏  详解Android中Activity的四大启动模式实验简述  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  Android使用GridView实现日历的简单功能  Laravel怎么上传文件_Laravel图片上传及存储配置  Laravel模型事件有哪些_Laravel Model Event生命周期详解