golang解析xml

解析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

相關文章
相關標籤/搜索