使用go语言解析xml的实现方法(必看篇)
发布时间 - 2026-01-11 01:49:24 点击率:次操作系统: CentOS 6.9_x64

go语言版本: 1.8.3
问题描述
现有一个自动报障程序,如果服务出错会自动给指定人发送邮件,配置文件内容如下(default.xml):
<?xml version="1.0" encoding="UTF-8"?>
<config>
<smtpServer>smtp.163.com</smtpServer>
<smtpPort>25</smtpPort>
<sender>user@163.com</sender>
<senderPasswd>123456</senderPasswd>
<receivers flag="true">
<user>Mike_Zhang@live.com</user>
<user>test1@qq.com</user>
</receivers>
</config>
该配置以config为root标签,有xml text部分(比如smtpServer标签)、嵌套xml(receivers标签)、有xml attribute部分(receivers标签的flag)、类似数组的多行配置(user标签), 数据类型有字符串和数字两种类型。
解决方案
package main
import (
"encoding/xml"
"fmt"
"io/ioutil"
"os"
)
type SConfig struct {
XMLName xml.Name `xml:"config"` // 指定最外层的标签为config
SmtpServer string `xml:"smtpServer"` // 读取smtpServer配置项,并将结果保存到SmtpServer变量中
SmtpPort int `xml:"smtpPort"`
Sender string `xml:"sender"`
SenderPasswd string `xml:"senderPasswd"`
Receivers SReceivers `xml:"receivers"` // 读取receivers标签下的内容,以结构方式获取
}
type SReceivers struct {
Flag string `xml:"flag,attr"` // 读取flag属性
User []string `xml:"user"` // 读取user数组
}
func main() {
file, err := os.Open("default.xml") // For read access.
if err != nil {
fmt.Printf("error: %v", err)
return
}
defer file.Close()
data, err := ioutil.ReadAll(file)
if err != nil {
fmt.Printf("error: %v", err)
return
}
v := SConfig{}
err = xml.Unmarshal(data, &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Println(v)
fmt.Println("SmtpServer : ",v.SmtpServer)
fmt.Println("SmtpPort : ",v.SmtpPort)
fmt.Println("Sender : ",v.Sender)
fmt.Println("SenderPasswd : ",v.SenderPasswd)
fmt.Println("Receivers.Flag : ",v.Receivers.Flag)
for i,element := range v.Receivers.User {
fmt.Println(i,element)
}
}
运行效果:
[root@local t1]# ls
default.xml xmlCnfTest1.go
[root@local t1]# go run xmlCnfTest1.go
{{ config} smtp.163.com 25 user@163.com 123456 {true [Mike_Zhang@live.com test1@qq.com]}}
SmtpServer : smtp.163.com
SmtpPort : 25
Sender : user@163.com
SenderPasswd : 123456
Receivers.Flag : true
Mike_Zhang@live.com
test1@qq.com
[root@local t1]#
讨论
如果需要直接从字符串解析xml配置,可将如下语句中的data替换即可:
err = xml.Unmarshal(data, &v)
比如:
err = xml.Unmarshal([]byte(ConfigContent), &v) // ConfigContent为xml字符串
好,就这些了,希望对你有帮助。
以上这篇使用go语言解析xml的实现方法(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# go语言解析xml
# Go语言实现对XML的读取和修改
# go语言处理JSON和XML数据示例解析
# Go语言中XML文件的读写操作
# Go语言中的数据格式(json、xml 、msgpack、protobuf)使用总结
# 从入门到精通:Go语言XML数据解析指南
# 给大家
# 你有
# 希望能
# 并将
# 这篇
# 可将
# 必看
# 小编
# 配置文件
# 大家多多
# 人发
# 两种类型
# 操作系统
# 最外层
# sender
# user
# senderPasswd
# smtpPort
# config
# gt
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Linux后台任务运行方法_nohup与&使用技巧【技巧】
郑州企业网站制作公司,郑州招聘网站有哪些?
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
C#如何调用原生C++ COM对象详解
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
Bootstrap整体框架之JavaScript插件架构
如何在不使用负向后查找的情况下匹配特定条件前的换行符
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
英语简历制作免费网站推荐,如何将简历翻译成英文?
Laravel如何记录自定义日志?(Log频道配置)
制作旅游网站html,怎样注册旅游网站?
活动邀请函制作网站有哪些,活动邀请函文案?
大连网站制作公司哪家好一点,大连买房网站哪个好?
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
Laravel如何配置和使用缓存?(Redis代码示例)
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
如何快速生成凡客建站的专业级图册?
Laravel怎么使用artisan命令缓存配置和视图
MySQL查询结果复制到新表的方法(更新、插入)
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
bing浏览器学术搜索入口_bing学术文献检索地址
公司网站制作需要多少钱,找人做公司网站需要多少钱?
Python文件异常处理策略_健壮性说明【指导】
EditPlus中的正则表达式实战(5)
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
如何快速上传建站程序避免常见错误?
EditPlus中的正则表达式 实战(2)
Firefox Developer Edition开发者版本入口
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
Python自动化办公教程_ExcelWordPDF批量处理案例
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
如何打造高效商业网站?建站目的决定转化率
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
香港服务器租用每月最低只需15元?
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
详解jQuery停止动画——stop()方法的使用
如何用美橙互联一键搭建多站合一网站?
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
高端智能建站公司优选:品牌定制与SEO优化一站式服务
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
Android自定义控件实现温度旋转按钮效果
linux top下的 minerd 木马清除方法
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
如何在IIS7上新建站点并设置安全权限?

