国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

使用go語言解析xml的實現方法(必看篇)

2020-04-01 19:05:26
字體:
來源:轉載
供稿:網友

操作系統: 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 mainimport (  "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]# lsdefault.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.comSmtpPort : 25Sender : user@163.comSenderPasswd : 123456Receivers.Flag : trueMike_Zhang@live.comtest1@qq.com[root@local t1]#

討論

如果需要直接從字符串解析xml配置,可將如下語句中的data替換即可:

err = xml.Unmarshal(data, &v)

比如:

err = xml.Unmarshal([]byte(ConfigContent), &v) // ConfigContent為xml字符串

好,就這些了,希望對你有幫助。

以上這篇使用go語言解析xml的實現方法(必看篇)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凤翔县| 屏南县| 通州市| 绥化市| 玉屏| 昌宁县| 凤山县| 盘山县| 康马县| 蒙城县| 潞城市| 铁岭县| 土默特右旗| 收藏| 恩施市| 全南县| 阿尔山市| 渭源县| 隆安县| 马关县| 九江县| 望奎县| 铜梁县| 隆回县| 辽宁省| 嘉祥县| 饶河县| 云龙县| 兰溪市| 长治县| 高尔夫| 永宁县| 密云县| 武功县| 阿图什市| 本溪| 佛学| 象山县| 英超| 龙陵县| 襄城县|