Go笔记-XML

前端之家收集整理的这篇文章主要介绍了Go笔记-XML前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

解析xml

示例xml:xml_test.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <servers version="1">
  3. <server>
  4. <serverName>Shanghai_VPN</serverName>
  5. <serverIP>127.0.0.1</serverIP>
  6. </server>
  7. <server>
  8. <serverName>Beijing_VPN</serverName>
  9. <serverIP>127.0.0.2</serverIP>
  10. </server>
  11. </servers>
  1. type Servers struct {
  2. XMLName xml.Name `xml:"servers"`
  3. Version string `xml:"version,attr"`
  4. Svs []Server `xml:"server"`
  5. Description string `xml:",innerxml"`
  6. }
  7.  
  8. type Server struct {
  9. XMLName xml.Name `xml:"server"`
  10. ServerName string `xml:"serverName"`
  11. ServerIP string `xml:"serverIP"`
  12. }
  13.  
  14. func ReadXml() {
  15. f,err := os.Open("xml_test.xml")
  16. if err != nil {
  17. fmt.Println(err)
  18. return
  19. }
  20. defer f.Close()
  21.  
  22. data,err := IoUtil.ReadAll(f)
  23. if err != nil {
  24. fmt.Println(err)
  25. return
  26. }
  27.  
  28. servers := Servers{}
  29. err = xml.Unmarshal(data,&servers)
  30. if err != nil {
  31. fmt.Println(err)
  32. return
  33. }
  34.  
  35. fmt.Printf("%#v\n",servers)
  36. }

输出

  1. xml.Servers{XMLName:xml.Name{Space:"",Local:"servers"},Version:"1",Svs:[]xml.Server{xml.Server{XMLName:xml.Name{Space:"",Local:"server"},ServerName:"Shanghai_VPN",ServerIP:"127.0.0.1"},xml.Server{XMLName:xml.Name{Space:"",ServerName:"Beijing_VPN",ServerIP:"127.0.0.2"}},Description:"\r\n <server>\r\n <serverName>Shanghai_VPN</serverName>\r\n <serverIP>127.0.0.1</serverIP>\r\n </server>\r\n <server>\r\n <serverName>Beijing_VPN</serverName>\r\n <serverIP>127.0.0.2</serverIP>\r\n </server>\r\n"}

结构体中tag标签的写法参考xml.Unmarshal上的注释。

输出xml

这里省略了Servers和Server两个的声明,见上面的定义。

  1. servers := &Servers{Version: "1"}
  2. servers.Svs = append(servers.Svs,Server{ServerName: "Shanghai_VPN",ServerIP: "127.0.0.1"})
  3. servers.Svs = append(servers.Svs,Server{ServerName: "Beijing_VPN",ServerIP: "127.0.0.2"})
  4.  
  5. //data,err := xml.Marshal(servers)
  6. data,err := xml.MarshalIndent(servers,""," ")
  7. if err != nil {
  8. fmt.Println(err)
  9. return
  10. }
  11. fmt.Println(xml.Header)
  12. fmt.Println(string(data))

猜你在找的XML相关文章