golang解析xml

解析xml标签或者html标签,都是xml文档格式。要是返回的html标签,可以用第三方依赖库goquery来解析。

下面说下,解析xml标签的格式。直接上代码,代码如下:

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("servers.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)
  }
}

 

 举例:xml 格式如下:文件名,servers.xml

 
   smtp.163.com
   25
   user@163.com
  123456
   "true">
    16
     [email protected]
     [email protected]
  
 

 

在代码里,先针对xml的格式,创建对应的struct结构体,

type SConfig struct{
 ...
}
然后,读取xml文件,读取data,再解析对应的标签。

  执行结果如下:

golang解析xml_第1张图片

 

你可能感兴趣的:(golang解析xml)