发布于 2017-07-05 21:35:01 | 48 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的GO语言教程,程序狗速度看过来!

Go语言

Go是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。Go是谷歌2009年发布的第二款编程语言。2009年7月份,谷歌曾发布了Simple语言,它是用来开发Android应用的一种BASIC语言。


下面小编就为大家带来一篇使用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>[email protected]</sender>
  <senderPasswd>123456</senderPasswd>
  <receivers flag="true">
    <user>[email protected]</user>
    <user>[email protected]</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)
  }
}

运行效果:


[[email protected] t1]# ls
default.xml xmlCnfTest1.go
[[email protected] t1]# go run xmlCnfTest1.go
{{ config} smtp.163.com 25 [email protected] 123456 {true [[email protected] [email protected]]}}
SmtpServer : smtp.163.com
SmtpPort : 25
Sender : [email protected]
SenderPasswd : 123456
Receivers.Flag : true
[email protected]
[email protected]
[[email protected] t1]#

讨论

如果需要直接从字符串解析xml配置,可将如下语句中的data替换即可:


err = xml.Unmarshal(data, &v)

比如:


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

好,就这些了,希望对你有帮助。

以上这篇使用go语言解析xml的实现方法(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持PHPERZ。



相关阅读 :
使用go语言解析xml的实现方法(必看篇)
使用Go语言解析动态JSON格式的方法
Go语言中字符串的查找方法小结
深入解析Go语言编程中的递归使用
浅析Go语言编程当中映射和方法的基本使用
Go语言模拟while语句实现无限循环的方法
Go语言中接口组合的实现方法
Go语言中函数的参数传递与调用的基本方法
解析Go语言编程中的struct结构
使用Go语言简单模拟Python的生成器
Go语言生成素数的方法
Go语言Echo服务器的方法
最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  服务