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

下面说下,解析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.xmlspa

 <config>
   <smtpServer>smtp.163.com</smtpServer>
   <smtpPort>25</smtpPort>
   <sender>user@163.com</sender>
  <senderPasswd>123456</senderPasswd>
   <receivers flag="true">
    <age>16</age>
     <user>Mike_Zhang@live.com</user>
     <user>test1@qq.com</user>
  </receivers>
 </config>

 

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

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

  执行结果以下:server