在go语言中,通常会遇到需要将go结构对象序列化为xml,或者将xml反序列化为go结构。

go结构序列化为xml代码如下:

package main
import (
   "encoding/xml"
   "fmt"
)
type person struct {
   Name string `xml:"name,attr"`
   Age  int    `xml:"age,attr"`
   Sex  string
}
func main() {
   p := person{Name: "张三", Age: 40, Sex: "男"}
   var (
      data []byte
      err  error
   )
   // 有缩进格式
   if data, err = xml.MarshalIndent(p, "", " "); err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println(string(data))
   
   // 无缩进格式
   if data, err = xml.Marshal(p); err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println(string(data))
}

注意:生成有缩进格式xml的使用MarshalIndent,生成无缩进格式的使用Marshal。

xml反序列化为go结构代码如下:

package main

import (
	"encoding/xml"
	"fmt"
)

type XML struct {
	XMLName xml.Name `xml:"xml"`
	Text    string   `xml:",chardata"`
	Abc     string   `xml:"abc"`
}

func main() {
	xmlSrc := []byte(`<xml>
		<abc>123</abc>
	</xml>`)

	var x XML
	xml.Unmarshal(xmlSrc, &x)

	if x.Abc == "123" {
		fmt.Println("ok")
	}
}

xml反序列化为go结构,首先需要根据xml报文结构来编写golang的结构体定义代码,这一点比较麻烦,可以使用在线工具来将xml生成golang结构定义,比较好用如这个: 在线xml生成golang结构定义工具 ,然后再使用xml.Unmarshal方法进行反序列化。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐