zoukankan      html  css  js  c++  java
  • 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

     <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结构体,

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

      执行结果如下:

  • 相关阅读:
    codeforces 132C Logo Turtle(dp)
    LCIS 最长公共上升子序列
    欧拉函数与欧拉定理
    HDU 5592 ZYB's Premutation(树状数组+二分)
    HDU 4294 Multiple(搜索+数学)
    1080 Graduate Admission (30分)(排序)
    1078 Hashing (25分)(欧拉筛素数打表 + hash平方探测)
    1074 Reversing Linked List (25分)(链表区间反转)
    1099 Build A Binary Search Tree (30分)(BST的层序或者中序遍历建树,层序便利输出树)
    1068 Find More Coins (30分)(记忆化搜索 || dp)
  • 原文地址:https://www.cnblogs.com/unqiang/p/10722282.html
Copyright © 2011-2022 走看看