主页 > 知识库 > 使用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的实现方法(必看篇)的相关信息资讯供网民参考!
  • 推荐文章