新闻中心
Golang如何使用encoding/xml处理XML数据_Golang XML解析与操作方法
Go语言encoding/xml包支持XML解析与生成,通过结构体标签映射字段,可处理嵌套元素和属性,使用Unmarshal解析XML到结构体,Marshal生成XML,支持流式解析动态结构,适用于配置文件、API响应等场景。

在Go语言中,encoding/xml 包提供了对XML数据的解析和生成支持,适用于处理配置文件、API响应(如SOAP)、数据交换格式等场景。使用该包可以将XML数据映射到结构体中,也可以将结构体序列化为XML输出,操作简洁高效。
1. 解析XML数据到结构体
通过定义与XML结构匹配的Go结构体,并使用字段标签 xml:"tagname" 来指定对应关系,可将XML内容反序列化为结构体实例。
示例XML内容:
<person> <name>Alice</name> <age>30</age> <city>Beijing</city> </person>
对应的结构体定义与解析代码:
type Person struct {
Name string `xml:"name"`
Age int `xml:"age"`
City string `xml:"city"`
}
func main() {
xmlData := `
<person>
<name>Alice</name>
<age>30</age>
<city>Beijing</city>
</person>`
var person Person
err := xml.Unmarshal([]byte(xmlData), &person)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", person) // 输出:{Name:Alice Age:30 City:Beijing}
}
说明:Unmarshal 函数将字节切片解析为结构体。字段标签中的名称需与XML标签一致,大小写敏感。
2. 处理嵌套结构和属性
XML常包含嵌套元素和属性,encoding/xml 同样支持这些结构。
示例带属性和嵌套的XML:
<book category="fiction"> <title lang="en">Go Programming</title> <author>John Doe</author> <price>29.99</price> </book>
结构体定义:
type Book struct {
Category string `xml:"category,attr"`
Title string `xml:"title"`
Lang string `xml:"title,attr"` // 注意:属性需放在对应元素字段上
Author string `xml:"author"`
Price float64 `xml:"price"`
}
但注意:Go的xml包不支持直接将属性绑定到非所属字段。更准确的方式是使用子结构体:
Motiff妙多
Motiff妙多是一款AI驱动的界面设计工具,定位为“AI时代设计工具”
334
查看详情
type Book struct {
Category string `xml:"category,attr"`
Title struct {
Lang string `xml:"lang,attr"`
Text string `xml:",chardata"`
} `xml:"title"`
Author string `xml:"author"`
Price float64 `xml:"price"`
}
这样能正确解析 lang 属性和标题文本内容。
3. 生成XML数据(序列化)
使用 xml.Marshal 或 xml.MarshalIndent 可将结构体转换为XML格式。
person := Person{
Name: "Bob",
Age: 25,
City: "Shanghai",
}
output, err := xml.MarshalIndent(person, "", " ")
if err != nil {
log.Fatal(err)
}
fmt.Println(xml.Header + string(output))
输出结果:
<?xml version="1.0" encoding="UTF-8"?> <Person> <name>Bob</name> <age>25</age> <city>Shanghai</city> </Person>
注意:xml.Header 常用于添加标准XML头信息。
4. 处理未知或动态XML结构
当XML结构不固定时,可使用 map[string]interface{} 不够直接,encoding/xml 更推荐使用 xml.Token 进行流式解析。
示例:读取任意XML并打印标签名
decoder := xml.NewDecoder(strings.NewReader(xmlData))
for {
token, err := decoder.Token()
if err == io.EOF {
break
}
if err != nil {
log.Fatal(err)
}
switch se := token.(type) {
case xml.StartElement:
fmt.Println("Start:", se
.Name.Local)
case xml.EndElement:
fmt.Println("End:", se.Name.Local)
case xml.CharData:
fmt.Printf(" Text: %s\n", string(se))
}
}
这种方式适合处理大文件或结构不确定的XML,避免内存溢出。
基本上就这些。掌握结构体映射、属性处理、嵌套解析和流式读取,就能灵活应对大多数XML操作需求。不复杂但容易忽略细节,比如标签大小写和属性归属。
以上就是Golang如何使用encoding/xml处理XML数据_Golang XML解析与操作方法的详细内容,更多请关注其它相关文章!
# golang
# 抖音餐饮营销推广三水
# 宁波seo哪个好
# 郑州seo技术代理招聘
# 桂林建设网站首页
# 百度关键词排名违法吗
# 相关文章
# 推荐使用
# 就能
# 放在
# 可将
# 流式
# 适用于
# 操作方法
# 如何使用
# xml处理
# xml解析
# 配置文件
# switch
# ai
# 字节
# go语言
# go
# seo工具效果好
# 银川营销网络推广怎么样
# 企业推广营销花瓶厂家
# 营销推广版薯条是什么
# 公明公司网站建设
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
PySpark中从现有列右侧提取可变长度字符创建新列的教程
sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统
如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力
Surface怎么安装系统 微软Surface Pro U盘重装win11教程
Win11截图该按哪些键 Win11截屏完整流程解析【教程】
Composer如何解决json扩展缺失的错误
海量存储:机器视觉智能化的核心基石
Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全
Linux如何排查内存不足OOME问题_LinuxOOM分析教程
b站怎么看视频的弹幕数量_b站弹幕数量查看方法
Selenium Python中处理点击后新窗口加载冻结问题的策略与实践
漫蛙2在线漫画入口 漫蛙正版漫画网页版直达
抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩
excel怎么制作工资条 excel快速生成工资条的方法
汽车之家官方网站官网入口_汽车之家网页版直接进入
利用5118提升短视频内容效果_5118短视频关键词优化方法
Win11网速慢怎么解决 Win11网络设置优化解除限速
初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解
抖音小游戏合成大西瓜免费秒玩入口链接 抖音小游戏热门合集秒玩网站
谷歌学术网站直达地址 谷歌学术搜索网页版一键进入
Yandex官网免登录入口_俄罗斯Yandex搜索引擎一键访问
小红书怎么解除第三方平台绑定_小红书多平台登录解绑方法介绍
Tailwind CSS line-clamp 布局问题解析与修复指南
快手网页版在线登录 快手网页版官网入口快速访问
PostgreSQL海量数据高效导入策略:Python与Django实践指南
漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接
如何提高微信支付的安全性_微信支付安全防护与设置建议
ArchiveofOurOwn小说阅读-ArchiveofOurOwn同人作品访问链接
Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation
Mac怎么查看崩溃日志_Mac控制台错误报告分析
生成rdflib自定义SPARQL函数:参数匹配与实践指南
解决macOS Tkinter应用双击启动崩溃:PyInstaller打包指南
html网页设计源代码怎么运行_运行html网页设计源代码步骤【指南】
css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容
Go Martini框架:动态服务解码后的图片内容
J*aScript中管理异步API调用:确保操作顺序与数据一致性
CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠
J*aScript map 迭代中检测空数组元素的有效方法
解决Flask中Quill编辑器内容提交失败及TypeError的指南
修复二维数组索引越界异常:一维循环到二维坐标的正确映射
漫蛙漫画官方首页 漫蛙2漫画在线阅读入口
百度网盘网页版入口 百度网盘网页版官方登录网址
UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS
Golang切片为何属于引用类型_Golang slice底层结构与引用语义说明
神经网络二分类模型训练异常:高损失与完美验证准确率的排查与修正
Win11怎么开启高性能模式_Windows 11电源计划优化设置
Golang如何通过reflect获取匿名字段方法_Golang reflect匿名字段方法访问技巧
一加手机电池耗电快怎么办_一加手机电池耗电快的解决方法
uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验
Sublime Text怎么显示空格和制表符_Sublime显示不可见字符设置


2025-11-27
浏览次数:次
返回列表
.Name.Local)
case xml.EndElement:
fmt.Println("End:", se.Name.Local)
case xml.CharData:
fmt.Printf(" Text: %s\n", string(se))
}
}