使用go语言解析xml的实现方法(必看篇)
程序员文章站
2022-03-20 16:37:15
操作系统: centos 6.9_x64
go语言版本: 1.8.3
问题描述
现有一个自动报障程序,如果服务出错会自动给指定人发送邮件,配置文件内容如下(defau...
操作系统: 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的实现方法(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。