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,再解析对应的标签。

      执行结果如下:

  • 相关阅读:
    TCP的流量控制
    [数组]数组元素分割
    [折半查找]排序数组中某个元素出现次数
    [队列]判断出栈序列
    [排序算法]堆排序
    [树结构]有实际用途的树的计算公式
    重写重要的库函数
    [链表]同时遍历两个链表
    [查找]二分查找
    [数组]数组元素置换方法
  • 原文地址:https://www.cnblogs.com/unqiang/p/10722282.html
Copyright © 2011-2022 走看看