国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

Go學習筆記:xml庫的使用

2020-04-01 19:11:41
字體:
來源:轉載
供稿:網友
Go學習筆記:xml庫的使用

  1. package main 
  2.  
  3. import ( 
  4.     "os" 
  5.     "io" 
  6.     "fmt" 
  7.     "encoding/xml" 
  8.     "strconv" 
  9.  
  10. type Config map[string]map[string]string 
  11.  
  12. var config = make(Config) 
  13.  
  14. type Class struct { 
  15.     XMLName xml.Name  `xml:"class"`      //xml元素名稱 
  16.     Id      int       `xml:"id,attr"`    // 
  17.     Pers    []Persion `xml:"persion"`    // 
  18.     Desc    string    `xml:",innerxml"`  // 
  19.  
  20. type Persion struct { 
  21.     XMLName  xml.Name `xml:"persion"
  22.     Id       int      `xml:"id,attr"
  23.     Name     string   `xml:"name"
  24.     Age      int      `xml:"age"
  25.  
  26. func (self *Config)LoadXmlFile(filename, node string) error{ 
  27.     fd, err := os.Open(filename) 
  28.     if err != nil{ 
  29.         return err  
  30.     }    
  31.     defer fd.Close() 
  32.     return self.Load(fd, node) 
  33. func (self *Config)Load(r io.Reader, node string) error { 
  34.     mynode := false 
  35.     if _, ok := (*self)[node]; !ok { 
  36.         (*self)[node] = make(map[string]string) 
  37.     }    
  38.     decoder := xml.NewDecoder(r) 
  39.     for { 
  40.         token, err := decoder.Token() 
  41.         if err != nil { 
  42.             if err.Error() == "EOF" { 
  43.                 break 
  44.             } 
  45.             return err 
  46.         } 
  47.         switch value := token.(type) { 
  48.             case xml.StartElement: 
  49.                 switch { 
  50.                     case value.Name.Local == node: 
  51.                         mynode = true 
  52.                     case mynode == true
  53.                         tb, err := decoder.Token() 
  54.                         if err != nil { 
  55.                             continue 
  56.                         } 
  57.                         switch tv := tb.(type) { 
  58.                             case xml.CharData: 
  59.                                 (*self)[node][value.Name.Local] = string(tv) 
  60.                         } 
  61.                 } 
  62.             case xml.EndElement: 
  63.                 if value.Name.Local == node{ 
  64.                     mynode = false 
  65.                 } 
  66.         } 
  67.     } 
  68.     return nil 
  69.  
  70.  
  71. func main(){ 
  72.     var ps = make([]Persion, 0) 
  73.     for i := 0; i < 5; i++ { 
  74.         var tp Persion 
  75.         tp.Id = i 
  76.         tp.Name = "persion" + strconv.Itoa(i) 
  77.         tp.Age = 20 + i 
  78.         ps = append(ps,tp) 
  79.     } 
  80.     var c = Class{Id:1, Pers: ps} 
  81.     var res, _ = xml.MarshalIndent(c, """    "
  82.     fmt.Println(c) 
  83.     fmt.Println(string(res)) 
  84.     config.LoadXmlFile("config.xml""global"
  85.     fmt.Println(config) 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南宫市| 溧水县| 延边| 侯马市| 进贤县| 云龙县| 吴川市| 肃宁县| 和田市| 奇台县| 淮阳县| 南康市| 高邑县| 桦川县| 罗定市| 沙湾县| 肃南| 浠水县| 沁阳市| 抚宁县| 济源市| 分宜县| 礼泉县| 桐柏县| 昌江| 马鞍山市| 时尚| 南江县| 瑞安市| 孝感市| 隆回县| 即墨市| 新兴县| 淮阳县| 永康市| 遂溪县| 新丰县| 仪陇县| 丹巴县| 屏东县| 资源县|