婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 使用go語言解析xml的實現方法(必看篇)

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

熱門標簽:惠州電銷防封電話卡 濱州自動電銷機器人排名 建造者2地圖標注 浙江高頻外呼系統多少錢一個月 阿里云ai電話機器人 黃岡人工智能電銷機器人哪個好 鄭州亮點科技用的什么外呼系統 汕頭小型外呼系統 釘釘有地圖標注功能嗎

操作系統: 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的實現方法(必看篇)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • golang解析xml的方法

標簽:泰安 滄州 駐馬店 阿壩 晉中 瀘州 昭通 東營

巨人網絡通訊聲明:本文標題《使用go語言解析xml的實現方法(必看篇)》,本文關鍵詞  使用,語言,解析,xml,的,實現,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《使用go語言解析xml的實現方法(必看篇)》相關的同類信息!
  • 本頁收集關于使用go語言解析xml的實現方法(必看篇)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 乐东| 河南省| 梅河口市| 惠安县| 大姚县| 凤庆县| 黔南| 万宁市| 静乐县| 长阳| 农安县| 长子县| 邵阳县| 大方县| 桐庐县| 灵寿县| 威远县| 赤壁市| 华亭县| 宜兴市| 奉化市| 宜城市| 大竹县| 岐山县| 克山县| 尖扎县| 尼木县| 丽江市| 漳平市| 湾仔区| 湟源县| 宜君县| 福安市| 克拉玛依市| 许昌市| 城步| 浮山县| 崇明县| 宁乡县| 泰州市| 札达县|