在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方法进行反序列化。