• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    使用go语言解析xml的实现方法(必看篇)

    操作系统: 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语言Web编程实现Get和Post请求发送与解析的方法详解
    下一篇:go1.8之安装配置具体步骤
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    使用go语言解析xml的实现方法(必看篇) 使用,语言,解析,xml,的,实现,