文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用Golang解析Yaml、Json、Xml文件

2024-12-02 20:32

关注

本文转载自微信公众号「运维开发故事」,作者wanger 。转载本文请联系运维开发故事公众号。

大家好,我是wanger。

解析和生成yaml文件

YAML(YAML 不是标记语言)是一种人类可读的数据序列化语言。它通常用于配置文件,但也用于数据存储或传输。YAML 本身支持三种基本数据类型:标量(例如字符串、整数和浮点数)、列表和映射(字典/哈希)。我们使用 yaml.v3 包来解析yaml文件

  1. go get gopkg.in/yaml.v3 

解析yaml

  1. func Unmarshal(in []byte, out interface{}) (err error) 

我们使用 Unmarshal来解析yaml yaml文件内容如下:

  1. name: wanger 
  2.   age: 24 
  3.   address: beijing 
  4.   hobby: 
  5.     - literature 
  6.     - social 
  7. name: 冬哥 
  8.   age: 30 
  9.   address: chengdu 
  10.   hobby: 
  11.     - basketball 
  12.     - guitar 
  13. name: 华子 
  14.   age: 27 
  15.   address: shenzhen 
  16.   hobby: 
  17.     - 王者荣耀 
  18. name: 乔克 
  19.   age: 29 
  20.   address: chongqing 
  21.   hobby: 
  22.     - 阅读 
  23.     - 王者荣耀 
  24. name: 夏老师 
  25.   age: 27 
  26.   address: chengdu 
  27.   hobby: 
  28.     - 吃吃喝喝 
  29. name: 姜总 
  30.   age: 25 
  31.   address: shanghai 
  32.   hobby: 
  33.     - talkshow 
  34. name: 郑哥 
  35.   age: 30 
  36.   address: beijing 
  37.   hobby: 
  38.     - 阅读 
  39.     - 复读机 

读取test.yaml

  1. package main 
  2.  
  3. import ( 
  4.  "fmt" 
  5.  "gopkg.in/yaml.v2" 
  6.  "io/ioutil" 
  7.  "gopkg.in/yaml.v3" 
  8.  "log" 
  9.  
  10.  
  11.  
  12. type Users struct { 
  13.  Name   string      `yaml:"name"
  14.  Age    int8        `yaml:"age"
  15.  Address  string `yaml:"address"
  16.  Hobby []string `yaml:"hobby"
  17.  
  18.  
  19. func main() { 
  20.  
  21.  file, err := ioutil.ReadFile("test.yaml"
  22.  if err != nil { 
  23.   log.Fatal(err) 
  24.  } 
  25.  var data [7]Users 
  26.  err2 := yaml.Unmarshal(file, &data) 
  27.  
  28.  if err2 != nil { 
  29.   log.Fatal(err2) 
  30.  } 
  31.  for _, v := range data { 
  32.   fmt.Println(v) 
  33.  } 

输出内容如下

  1. {wanger 24 beijing [literature social]} 
  2. {冬哥 30 chengdu [basketball guitar]} 
  3. {华子 27 shenzhen [王者荣耀]} 
  4. {乔克 29 chongqing [阅读 王者荣耀]} 
  5. {夏老师 27 chengdu [吃吃喝喝]} 
  6. {姜总 25 shanghai [钓鱼  音乐 美食  酒talkshow]} 
  7. {郑哥 30 beijing [阅读 复读机]} 

生成yaml

  1. func Marshal(in interface{}) (out []byte, err error) 

我们使用 Marshal来生成yaml,生成一个关于我们团队信息的yaml文件吧 可以通过定义结构体yaml标签来自定义输出的yaml文件的键名

  1. package main 
  2.  
  3. import ( 
  4.  "fmt" 
  5.  "gopkg.in/yaml.v3" 
  6.  
  7.  
  8.  
  9. type Users struct { 
  10.  Name   string      `yaml:"name"
  11.  Age    int8        `yaml:"age"
  12.  Address  string `yaml:"address"
  13.  Hobby []string `yaml:"hobby"
  14.  
  15.  
  16. func main() { 
  17.  wanger := Users{ 
  18.   Name"wanger"
  19.   Age:  24, 
  20.   Address: "beijing"
  21.   Hobby: []string{"literature""social"}, 
  22.  } 
  23.  dongdong := Users{ 
  24.   Name"冬哥"
  25.   Age:  30, 
  26.   Address: "chengdu"
  27.   Hobby: []string{"basketball""guitar"}, 
  28.  } 
  29.  xialaoshi := Users{ 
  30.   Name"夏老师"
  31.   Age:  29, 
  32.   Address: "chengdu"
  33.   Hobby: []string{"吃吃喝喝"}, 
  34.  } 
  35.  huazai := Users{ 
  36.   Name"华子"
  37.   Age:  28, 
  38.   Address: "shenzhen"
  39.   Hobby: []string{"王者荣耀"}, 
  40.  } 
  41.  qiaoke := Users{ 
  42.   Name"乔克"
  43.   Age:  30, 
  44.   Address: "chongqing"
  45.   Hobby: []string{"阅读""王者荣耀"}, 
  46.  } 
  47.  jiangzong := Users{ 
  48.   Name"姜总"
  49.   Age:  25, 
  50.   Address: "shanghai"
  51.   Hobby: []string{"钓鱼","音乐","美食","酒"}, 
  52.  } 
  53.  zhengge := Users{ 
  54.   Name"郑哥"
  55.   Age:  30, 
  56.   Address: "beijing"
  57.   Hobby: []string{"阅读""复读机"}, 
  58.  } 
  59.     userlist:=[7]Users{wanger,dongdong,huazai,qiaoke,xialaoshi,jiangzong,zhengge} 
  60.  
  61.  yamlData, err := yaml.Marshal(&userlist) 
  62.  
  63.  if err != nil { 
  64.   fmt.Printf("Error while Marshaling. %v", err) 
  65.  } 
  66.  
  67.  fmt.Println(string(yamlData)) 
  68.     fileName := "test.yaml" 
  69.     err = ioutil.WriteFile(fileName, yamlData, 0644) 
  70.     if err != nil { 
  71.         panic("Unable to write data into the file"
  72.     } 
  73. }     

生成的yaml信息如下

  1. name: wanger 
  2.   age: 24 
  3.   address: beijing 
  4.   hobby: 
  5.     - literature 
  6.     - social 
  7. name: 冬哥 
  8.   age: 30 
  9.   address: chengdu 
  10.   hobby: 
  11.     - basketball 
  12.     - guitar 
  13. name: 华子 
  14.   age: 27 
  15.   address: shenzhen 
  16.   hobby: 
  17.     - 王者荣耀 
  18. name: 乔克 
  19.   age: 29 
  20.   address: chongqing 
  21.   hobby: 
  22.     - 阅读 
  23.     - 王者荣耀 
  24. name: 夏老师 
  25.   age: 27 
  26.   address: chengdu 
  27.   hobby: 
  28.     - 吃吃喝喝 
  29. name: 姜总 
  30.   age: 25 
  31.   address: shanghai 
  32.   hobby: 
  33.     - 钓鱼   
  34.     - 音乐 
  35.     - 美食  
  36.     - 酒 
  37. name: 郑哥 
  38.   age: 30 
  39.   address: beijing 
  40.   hobby: 
  41.     - 阅读 
  42.     - 复读机 

解析和生成json文件

我们使用encoding/json标准库包来实现json文件的解析与生成

读取和解析json文件

  1. func Unmarshal(data []byte, v interface{}) error 

我这里定义了一个user.json文件

  1.   "users": [ 
  2.     { 
  3.       "name""wanger"
  4.       "address""beijing"
  5.       "age": 24, 
  6.       "social": { 
  7.         "mobile""111111111"
  8.         "email""wanger@163.com" 
  9.       } 
  10.     }, 
  11.     { 
  12.       "name""dongdong"
  13.       "address""chengdu"
  14.       "age": 30, 
  15.       "social": { 
  16.         "mobile""2222222222222222"
  17.         "emial""dongdong@163.com" 
  18.       } 
  19.     }, 
  20.     { 
  21.       "name""夏老师"
  22.       "address""chengdu"
  23.       "age": 29, 
  24.       "social": { 
  25.         "mobile""2232222222222222"
  26.         "emial""xialaoshi@163.com" 
  27.       } 
  28.     }, 
  29.     { 
  30.       "name""郑哥"
  31.       "address""beijing"
  32.       "age": 30, 
  33.       "social": { 
  34.         "mobile""12222211111"
  35.         "email""zhengge@163.com" 
  36.       } 
  37.     }, 
  38.     { 
  39.       "name""姜总"
  40.       "address""shanghai"
  41.       "age": 25, 
  42.       "social": { 
  43.         "mobile""111122211"
  44.         "email""jaingzong@163.com" 
  45.       } 
  46.     }, 
  47.     { 
  48.       "name""乔克"
  49.       "address""chongqing"
  50.       "age": 30, 
  51.       "social": { 
  52.         "mobile""11333331111111"
  53.         "email""qiaoke@163.com" 
  54.       } 
  55.     }, 
  56.     { 
  57.       "name""华仔"
  58.       "address""shenzhen"
  59.       "age": 28, 
  60.       "social": { 
  61.         "mobile""113311111"
  62.         "email""huazai@163.com" 
  63.       } 
  64.     } 
  65.   ] 

读取user.json文件

  1. package main 
  2.  
  3. import ( 
  4.  "encoding/json" 
  5.  "fmt" 
  6.  "io/ioutil" 
  7.  "os" 
  8.  "strconv" 
  9. func main() { 
  10.  jsonFile,err:=os.Open("user.json"
  11.  if err != nil { 
  12.   fmt.Println(err) 
  13.  } 
  14.  fmt.Println("Successfully Opened users.json"
  15.  defer jsonFile.Close() 
  16.  byteValue,_:=ioutil.ReadAll(jsonFile) 
  17.  var users Users 
  18.  json.Unmarshal(byteValue,&users) 
  19.  for i :=0;i
  20.   fmt.Println("User Type: "+ users.Users[i].Address) 
  21.   fmt.Println("User Age: "+strconv.Itoa(users.Users[i].Age)) 
  22.   fmt.Println("User Name: "+users.Users[i].Name
  23.   fmt.Println("User Email: "+users.Users[i].Social.Email) 
  24.  } 
  25.  var result Users 
  26.  json.Unmarshal(byteValue,&result) 
  27. type Users struct { 
  28.  Users []User `json:"users"
  29. type User struct { 
  30.  Name string `json:"name"
  31.  Address string `json:"address"
  32.  Age int `json:"Age"
  33.  Social Social `json:"social"
  34. type Social struct { 
  35.  Mobile string `json:"mobile"
  36.  Email string `json:"email"

输出结果如下

  1. Successfully Opened users.json 
  2. User Type: beijing 
  3. User Age: 24 
  4. User Name: wanger 
  5. User Email: wanger@163.com 
  6. User Type: chengdu 
  7. User Age: 30 
  8. User Name: dongdong 
  9. User Email:  
  10. User Type: chengdu 
  11. User Age: 28 
  12. User Name: 夏老师 
  13. User Email:  
  14. User Type: beijing 
  15. User Age: 30 
  16. User Name: 郑哥 
  17. User Email: zhengge@163.com 
  18. User Type: shanghai 
  19. User Age: 25 
  20. User Name: 姜总 
  21. User Email: jaingzong@163.com 
  22. User Type: chongqing 
  23. User Age: 29 
  24. User Name: 乔克 
  25. User Email: qiaoke@163.com 
  26. User Type: shenzhen 
  27. User Age: 28 
  28. User Name: 华仔 
  29. User Email: huazai@163.com 

当然有时候我们可能不知道要读取的json数据结构,这就没办法预定义结构体,那么我们可以使用**map[string]interface{}**类型来解析json。

  1. var result map[string]interface{} 
  2. err = json.Unmarshal(byteValue, &result) 
  3. fmt.Printf("%+v\n", result) 

输出信息如下:

  1. map[users:[map[address:beijing age:24 name:wanger social:map[email:wanger@163.com mobile:111111]] map[address:chengdu age:30 name:dongdong social:map[emial:dongdong@163.com mobil222222222222222]] map[address:chengdu age:28 name:夏老师 social:map[emial:xialaoshi@163.cmobile:2232222222222222]] map[address:beijing age:30 name:郑哥 social:map[email:zhengge@1com mobile:12222211111]] map[address:shanghai age:25 name:姜总 social:map[email:jaingzong3.com mobile:111122211]] map[address:chongqing age:29 name:乔克 social:map[email:qiaoke@1com mobile:11333331111111]] map[address:shenzhen age:28 name:华仔 social:map[email:huazai3.com mobile:113311111]]]] 

生成json文件

  1. func Marshal(v interface{}) ([]byte, error) 
  2. package main 
  3.  
  4. import ( 
  5.  "encoding/json" 
  6.  "fmt" 
  7.  "io/ioutil" 
  8.  
  9. func main() { 
  10.  wanger:=User{Address:"beijing",Name:"wanger",Age:24,Social:Social{Email:"wanger@163.com",Mobile:"111111111111"}} 
  11.  huazi:=User{Address:"shenzhen",Name:"huazai",Age:28,Social:Social{Email:"huazai@163.com",Mobile:"111122211111"}} 
  12.  qiaoke:=User{Address:"chongqing",Name:"qiaoke",Age:30,Social:Social{Email:"qiaoke@163.com",Mobile:"13332211111"}} 
  13.  xialaoshi:=User{Address:"chengdu",Name:"夏老师",Age:29,Social:Social{Email:"xialaoshi@163.com",Mobile:"11144445411111"}} 
  14.  jiangzong:=User{Address:"shanghai",Name:"姜总",Age:25,Social:Social{Email:"jiangzong@163.com",Mobile:"111222445211111"}} 
  15.  dongdong:=User{Address:"chengdu",Name:"冬哥",Age:30,Social:Social{Email:"dongdong@163.com",Mobile:"1155555211111"}} 
  16.  zhengge:=User{Address:"beijing",Name:"郑哥",Age:24,Social:Social{Email:"zhengge@163.com",Mobile:"1112224566211111"}} 
  17.  result:=Users{Users: []User{wanger,huazi,jiangzong,xialaoshi,qiaoke,dongdong,zhengge}} 
  18.  bytearray,err:=json.Marshal(result) 
  19.  if err!=nil { 
  20.   fmt.Println(err) 
  21.  } 
  22.  fmt.Println(string(bytearray)) 
  23.  fileName := "user.json" 
  24.  err = ioutil.WriteFile(fileName, bytearray, 0644) 
  25.  if err != nil { 
  26.   panic("Unable to write data into the file"
  27.  } 
  28. type Users struct { 
  29.  Users []User `json:"users"
  30. type User struct { 
  31.  Name string `json:"name"
  32.  Address string `json:"address"
  33.  Age int `json:"Age"
  34.  Social Social `json:"social"
  35. type Social struct { 
  36.  Mobile string `json:"mobile"
  37.  Email string `json:"email"

输出内容如下

  1. {"users":[{"name":"wanger","address":"beijing","Age":24,"social":{"mobile":"111111111111","email":"wanger@163.com"}},{"name":"huazai","address":"shenzhen","Age":28,"social":{"mobile":"111122211111","email":"huazai@163.com"}},{"name":"姜总","address":"shanghai","Age":25,"social":{"mobile":"111222445211111","email":"jiangzong@163.com"}},{"name":"夏老师","address":"chengdu","Age":29,"social":{"mobile":"11144445411111","email":"xialaoshi@163.com"}},{"name":"qiaoke","address":"chongqing","Age":30,"social":{"mobile":"13332211111","email":"qiaoke@163.com"}},{"name":"冬哥","address":"chengdu","Age":30,"social":{"mobile":"1155555211111","email":"dongdong@163.com"}},{"name":"郑哥","address":"beijing","Age":24,"social":{"mobile":"1112224566211111","email":"zhengge@163.com"}}]} 

可以看出上面输出的json并不是很美观,可以使用更易读的函数**json.MarshalIndent()**函数,MarshalIndent()可以定义输出的前缀和缩进

  1. bytearray,err:=json.MarshalIndent(result,""," "
  2. if err!=nil { 
  3.  fmt.Println(err) 
  4. fmt.Println(string(bytearray)) 

输出内容如下,比之前看起来好多了

  1.  "users": [ 
  2.   { 
  3.    "name""wanger"
  4.    "address""beijing"
  5.    "Age": 24, 
  6.    "social": { 
  7.     "mobile""111111111111"
  8.     "email""wanger@163.com" 
  9.    } 
  10.   }, 
  11.   { 
  12.    "name""huazai"
  13.    "address""shenzhen"
  14.    "Age": 28, 
  15.    "social": { 
  16.     "mobile""111122211111"
  17.     "email""huazai@163.com" 
  18.    } 
  19.   }, 
  20.   { 
  21.    "name""姜总"
  22.    "address""shanghai"
  23.    "Age": 25, 
  24.    "social": { 
  25.     "mobile""111222445211111"
  26.     "email""jiangzong@163.com" 
  27.    } 
  28.   }, 
  29.   { 
  30.    "name""夏老师"
  31.    "address""chengdu"
  32.    "Age": 29, 
  33.    "social": { 
  34.     "mobile""11144445411111"
  35.     "email""xialaoshi@163.com" 
  36.    } 
  37.   }, 
  38.   { 
  39.    "name""qiaoke"
  40.    "address""chongqing"
  41.    "Age": 30, 
  42.    "social": { 
  43.     "mobile""13332211111"
  44.     "email""qiaoke@163.com" 
  45.    } 
  46.   }, 
  47.   { 
  48.    "name""冬哥"
  49.    "address""chengdu"
  50.    "Age": 30, 
  51.    "social": { 
  52.     "mobile""1155555211111"
  53.     "email""dongdong@163.com" 
  54.    } 
  55.   }, 
  56.   { 
  57.    "name""郑哥"
  58.    "address""beijing"
  59.    "Age": 24, 
  60.    "social": { 
  61.     "mobile""1112224566211111"
  62.     "email""zhengge@163.com" 
  63.    } 
  64.   } 
  65.  ] 

解析和生成xml文件

解析xml文件

  1. func Unmarshal(data []byte, v interface{}) error 

定义一个user.xml文件

  1. "1.0" encoding="UTF-8"?> 
  2.  
  3.     <user address="beijing"
  4.         <name>wangername
  5.         24 
  6.          
  7.             wanger@163.com 
  8.             1233455464 
  9.          
  10.     user
  11.     <user address="chengdu"
  12.         <name>冬哥name
  13.         30 
  14.          
  15.             dongge@163.com 
  16.             12245555464 
  17.          
  18.     user
  19.     <user address="chengdu"
  20.         <name>夏老师name
  21.         29 
  22.          
  23.             xialaoshi@163.com 
  24.             12335677464 
  25.          
  26.     user
  27.     <user address="beijing"
  28.         <name>郑哥name
  29.         30 
  30.          
  31.             zhengge@163.com 
  32.             12334355464 
  33.          
  34.     user
  35.     <user address="shanghai"
  36.         <name>姜总name
  37.         25 
  38.          
  39.             jiangzong@163.com 
  40.             123565455464 
  41.          
  42.     user
  43.     <user address="chongqing"
  44.         <name>乔克name
  45.         29 
  46.          
  47.             qiaoke@163.com 
  48.             124676755464 
  49.          
  50.     user
  51.     <user address="shenzhen"
  52.         <name>华仔name
  53.         28 
  54.          
  55.             huazai@163.com 
  56.             1238655464 
  57.          
  58.     user
  59.  

解析xml文件 address,attr意味着该address字段是一个XML属性而不是一个嵌套元素。如果结构体有一个名为 XMLName 的 Name 类型的字段,Unmarshal 在该字段中记录元素名称。

为了正确解析,go 语言的 xml 包要求 struct 定义中的所有字段必须是可导出的(即首字母大写)

  1. package main 
  2.  
  3. import ( 
  4.  "encoding/xml" 
  5.  "fmt" 
  6.  "io/ioutil" 
  7.  "os" 
  8. func main() { 
  9.  
  10.  xmlFile,err:=os.Open("users.xml"
  11.  if err!=nil { 
  12.   fmt.Println(err) 
  13.  } 
  14.  fmt.Println("successfully opened users.xml"
  15.  defer xmlFile.Close() 
  16.  byteValue,_:=ioutil.ReadAll(xmlFile) 
  17.  var users Users 
  18.  xml.Unmarshal(byteValue,&users) 
  19.  for i :=0;i
  20.   fmt.Println("User Address: "+users.Users[i].Address) 
  21.   fmt.Println("User Name: "+users.Users[i].Name
  22.   fmt.Println("Facebook Url: "+users.Users[i].Social.Email) 
  23.  } 
  24. type Users struct { 
  25.  XMLName xml.Name `xml:"users"
  26.  Users []User `xml:"user"
  27.  
  28. type User struct { 
  29.  XMLName xml.Name `xml:"user"
  30.  Address string `xml:"address,attr"
  31.  Name string `xml:"name"
  32.  Social Social `xml:"social"
  33. type Social struct { 
  34.  XMLName xml.Name `xml:"social"
  35.  Mobile string `xml:"mobile"
  36.  Email string `xml:"email"

输出结果如下:

  1. successfully opened users.xml 
  2. User Address: beijing 
  3. User Name: wanger 
  4. Facebook Url: wanger@163.com 
  5. User Address: chengdu 
  6. User Name: 冬哥 
  7. Facebook Url: dongge@163.com 
  8. User Address: chengdu 
  9. User Name: 夏老师 
  10. Facebook Url: xialaoshi@163.com 
  11. User Address: beijing 
  12. User Name: 郑哥 
  13. Facebook Url: zhengge@163.com 
  14. User Address: shanghai 
  15. User Name: 姜总 
  16. Facebook Url: jiangzong@163.com 
  17. User Address: chongqing 
  18. User Name: 乔克 
  19. Facebook Url: qiaoke@163.com 
  20. User Address: shenzhen 
  21. User Name: 华仔 
  22. Facebook Url: huazai@163.com 

生成xml文件

  1. func Marshal(v interface{}) ([]byte, error) 
  2. func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) 

可以使用Marshal()函数和MarshalIndent()函数,之前的json和yaml包里也有用到,区别就是MarshalIndent()可以添加 前缀和缩进,看起来更美观一点,Marshal 和MarshalIndent通过编写一个或多个包含数据的 XML 元素来处理所有其他数据。

  1. package main 
  2.  
  3. import ( 
  4.  "encoding/xml" 
  5.  "fmt" 
  6.  "io/ioutil" 
  7. func main() { 
  8.  wanger:=User{Address:"beijing",Name:"wanger",Age:24,Social:Social{Email:"wanger@163.com",Mobile:"111111111111"}} 
  9.  huazi:=User{Address:"shenzhen",Name:"huazai",Age:28,Social:Social{Email:"huazai@163.com",Mobile:"111122211111"}} 
  10.  qiaoke:=User{Address:"chongqing",Name:"qiaoke",Age:30,Social:Social{Email:"qiaoke@163.com",Mobile:"13332211111"}} 
  11.  xialaoshi:=User{Address:"chengdu",Name:"夏老师",Age:29,Social:Social{Email:"xialaoshi@163.com",Mobile:"11144445411111"}} 
  12.  jiangzong:=User{Address:"shanghai",Name:"姜总",Age:25,Social:Social{Email:"jiangzong@163.com",Mobile:"111222445211111"}} 
  13.  dongdong:=User{Address:"chengdu",Name:"冬哥",Age:30,Social:Social{Email:"dongdong@163.com",Mobile:"1155555211111"}} 
  14.  zhengge:=User{Address:"beijing",Name:"郑哥",Age:24,Social:Social{Email:"zhengge@163.com",Mobile:"1112224566211111"}} 
  15.     v:=&Users{Users: []User{wanger,huazi,qiaoke,xialaoshi,zhengge,jiangzong,dongdong}} 
  16.  
  17.  result, err := xml.MarshalIndent(v, "  ""    "
  18.  if err != nil { 
  19.   fmt.Printf("error: %v\n", err) 
  20.  } 
  21.  fmt.Println(string(result)) 
  22.  fileName := "users.xml" 
  23.  err = ioutil.WriteFile(fileName, result, 0644) 
  24.  if err != nil { 
  25.   panic("Unable to write data into the file"
  26.  } 
  27. type Users struct { 
  28.  XMLName xml.Name `xml:"users"
  29.  Users []User `xml:"user"
  30.  
  31. type User struct { 
  32.  XMLName xml.Name `xml:"user"
  33.  Age int64 `xml:"age"
  34.  Address string `xml:"address,attr"
  35.  Name string `xml:"name"
  36.  Social Social `xml:"social"
  37. type Social struct { 
  38.  XMLName xml.Name `xml:"social"
  39.  Mobile string `xml:"mobile"
  40.  Email string `xml:"email"

输出信息如下

  1.  
  2.      <user address="beijing"
  3.          24 
  4.          <name>wangername
  5.           
  6.              111111111111 
  7.              wanger@163.com 
  8.           
  9.      user
  10.      <user address="shenzhen"
  11.          28 
  12.          <name>huazainame
  13.           
  14.              111122211111 
  15.              huazai@163.com 
  16.           
  17.      user
  18.      <user address="chongqing"
  19.          30 
  20.          <name>qiaokename
  21.           
  22.              13332211111 
  23.              qiaoke@163.com 
  24.           
  25.      user
  26.      <user address="chengdu"
  27.          29 
  28.          <name>夏老师name
  29.           
  30.              11144445411111 
  31.              xialaoshi@163.com 
  32.           
  33.      user
  34.      <user address="beijing"
  35.          24 
  36.          <name>郑哥name
  37.           
  38.              1112224566211111 
  39.              zhengge@163.com 
  40.           
  41.      user
  42.      <user address="shanghai"
  43.          25 
  44.          <name>姜总name
  45.           
  46.              111222445211111 
  47.              jiangzong@163.com 
  48.           
  49.      user
  50.      <user address="chengdu"
  51.          30 
  52.          <name>冬哥name
  53.           
  54.              1155555211111 
  55.              dongdong@163.com 
  56.           
  57.      user
  58.   

文中所有代码已同步到我们的github组织sunsharing-note可阅读原文访问

 

来源:运维开发故事内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯