新闻中心
如何用Golang操作encoding/xml解析XML_Golang XML解析实践
使用Golang的encoding/xml包可高效解析XML,需定义结构体并用标签映射元素与属性。支持处理嵌套结构、同名子元素切片、XML属性及命名空间,字段须导出且标签正确。示例涵盖基本解析、属性读取、嵌套与切片处理,适用于配置文件和Web服务场景。

处理 XML 数据在配置文件读取、Web 服务交互等场景中非常常见。Golang 的 encoding/xml 包提供了简洁而强大的方式来解析和生成 XML 数据。本文通过实际示例,介绍如何使用 Golang 解析 XML,涵盖结构体映射、属性读取、嵌套元素处理等核心用法。
定义结构体映射 XML 结构
要解析 XML,首先要根据 XML 文档结构定义对应的 Go 结构体。encoding/xml 使用结构体字段标签(tag)来指定 XML 元素与字段的对应关系。
例如,有如下 XML 内容:
30
可以定义结构体如下:
type Person struct {
Name string `xml:"name"`
Age int `xml:"age"`
City string `xml:"city"`
}
使用 xml.Unmarshal 解析字符串或字节流:
xmlData := `<person><name>Alice</name><age>30</age><city>Beijing</city></person>`
var p Person
err := xml.Unmarshal([]byte(xmlData), &p)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", p) // 输出: {Name:Alice Age:30 City:Beijing}
处理 XML 属性和嵌套结构
XML 元素常包含属性(attributes),可通过字段标签使用 attr 指令读取。嵌套元素则通过嵌套结构体表示。
考虑以下带属性和嵌套的 XML:
对应结构体定义:
type Book struct {
ID string `xml:
"id,attr"`
Category string `xml:"category,attr"`
Title string `xml:"title"`
Author struct {
Name string `xml:"name"`
Country string `xml:"country"`
} `xml:"author"`
}
解析代码:
PictoGraphic
AI驱动的矢量插图库和插图生成平台
133
查看详情
xmlData := `
<book id="123" category="tech">
<title>Go Programming</title>
<author>
<name>Bob</name>
<country>China</country>
</author>
</book>`
var book Book
err := xml.Unmarshal([]byte(xmlData), &book)
if err != nil {
log.Fatal(err)
}
fmt.Printf("ID: %s, Title: %s, Author: %s\n",
book.ID, book.Title, book.Author.Name)
处理多个同名子元素(切片)
当 XML 中存在多个相同标签的子元素时,应将结构体字段定义为切片类型。
例如:
结构体定义:
type Library struct {
Books []struct {
Title string `xml:"title"`
} `xml:"book"`
}
解析后,Books 切片会自动填充两个元素。遍历输出:
for i, b := range lib.Books {
fmt.Printf("Book %d: %s\n", i+1, b.Title)
}
忽略未知字段与命名空间处理
实际 XML 可能包含未映射字段。使用 xml:",any" 或匿名字段可跳过不关心的节点。若需忽略未知字段,可在字段标签中标注 xml:"-" 或直接省略标签。
对于带命名空间的 XML:
Go 的 encoding/xml 支持命名空间,字段标签可写为 xml:"ns item",前提是前缀在解析时有效。
基本上就这些。只要结构清晰,用结构体 + 标签的方式解析 XML 很直观。注意字段必须可导出(大写开头),标签拼写正确,就能顺利解析大多数 XML 场景。不复杂但容易忽略细节。
以上就是如何用Golang操作encoding/xml解析XML_Golang XML解析实践的详细内容,更多请关注其它相关文章!
# golang
# seo公司 认准乐云seo
# 宁夏企业seo方法研究
# 北湖seo定制
# 长沙seo网络营销推广收费
# 苹果网络营销推广
# 佛山公司网站建设优化
# 网站推广论坛海报设计图
# 绍兴营销推广加盟店
# 大连抖音seo系统
# 正则表达式
# 中文网
# 可在
# 相关文章
# 适用于
# 遍历
# 就能
# 多个
# 如何用
# xml解析
# 配置文件
# 字节
# go
# 优化网站设计方案
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
DLsite中文平台入口 DLsite官网内容在线查看
树莓派传感器触发:通过Twilio API发送WhatsApp消息教程
痛风发作了怎么办? 快速止痛和后期饮食调理
Lar*el递归关系中排除子孙节点的策略
Lar*el头像管理:图片缩放与旧文件删除的最佳实践
CSS图片焦点样式实现教程:理解与应用tabindex属性
优化大型XML文件解析:基于Python流式处理的内存高效方案
QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台
QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台
一加 14R 快充无反应_一加 14R 充电优化
MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复
c++ dfs和bfs代码 c++深度广度优先搜索算法
将JSON对象数组转置为键值对列表的实用指南
Python字典中优雅地迭代剩余元素的方法
淘宝支付提示失败如何解决 淘宝支付流程优化方法
深入理解J*aScript Promise异步执行与微任务队列
Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation
从OpenAI API响应中高效提取生成文本
漫蛙漫画网页端入口 漫蛙2官方正版漫画站点
快手极速版在线观看 官方网页版登录地址
win11 Snap Layouts怎么用 Win11窗口布局与分屏多任务高效指南【必学】
深入理解字体排版:Adobe光学字偶距与CSS字偶距的差异与实现
J*a 递归快速排序中静态变量的状态管理与陷阱
微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法
React列表渲染与独立状态管理:避免全局状态影响局部更新
谷歌google账号怎么注册账号 谷歌账号注册官方流程
2026年CSGO开箱网站推荐 CSGO开箱平台精选
解决Python单元测试中Mock异常方法调用计数为零的问题
C++如何实现异步操作_C++11使用std::future和std::async进行异步编程
vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法
taptap防沉迷怎么解除 taptap解除健康系统限制说明【2025最新】
excel如何生成目录 excel一键生成工作表目录超链接
必由学官方网站入口 必由学学生教师共用登录通道
在命令行怎么运行html项目_命令行运行html项目方法【教程】
composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?
sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统
J*aScript Promise链中如何正确终止后续.then执行并处理错误
如何在Promise链中有效终止错误处理后的执行
如何将HTML表格多行数据保存到Google Sheet
迅雷下载到U盘速度很慢怎么办_迅雷U盘下载慢优化方法
如何使用Go和Martini动态服务解码后的图片
C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图
C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责
“在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法
Django通过AJAX异步上传图片并保存至模型的完整指南
CSS实现侧边栏导航项全宽圆角悬停背景效果
C++ string find函数返回值npos详解_C++字符串查找失败的判断条件
192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台
windows10怎么查看硬盘序列号_windows10硬盘id查询命令
12306怎么选座位选到安静区_12306选座安静区域选择策略


2025-11-23
浏览次数:次
返回列表
"id,attr"`
Category string `xml:"category,attr"`
Title string `xml:"title"`
Author struct {
Name string `xml:"name"`
Country string `xml:"country"`
} `xml:"author"`
}