XML 编码和解码
XML(Extensible Markup Language)是一种可扩展的标记语言,用于数据交换和存储。Go 标准库中的 encoding/xml
包提供了 XML 数据的编码和解码功能。
编码
encoding/xml
包中的 Marshal()
函数可以将 Go 中的结构体、map、切片等数据类型编码成 XML 格式的字符串。下面是一个简单的 XML 编码示例:
package main
import (
"encoding/xml"
"fmt"
)
type Person struct {
XMLName xml.Name `xml:"person"`
Name string `xml:"name"`
Age int `xml:"age"`
}
func main() {
p := Person{
Name: "Alice",
Age: 18,
}
b, err := xml.MarshalIndent(p, "", " ")
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Println(string(b))
}
在上面的示例代码中,我们定义了一个名为 Person
的结构体,该结构体有两个字段 Name
和 Age
,使用 xml
标签指定了在 XML 格式中对应的元素名。在 main()
函数中,我们创建了一个 Person
类型的变量 p
,然后使用 xml.MarshalIndent()
函数将其编码成 XML 格式的字符串,并打印出来。
解码
encoding/xml
包中的 Unmarshal()
函数可以将 XML 格式的字符串解码成 Go 中的数据类型。下面是一个简单的 XML 解码示例:
package main
import (
"encoding/xml"
"fmt"
)
type Person struct {
XMLName xml.Name `xml:"person"`
Name string `xml:"name"`
Age int `xml:"age"`
}
func main() {
xmlStr := `<person><name>Bob</name><age>20</age></person>`
var p Person
err := xml.Unmarshal([]byte(xmlStr), &p)
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Println(p)
}
在上面的示例代码中,我们定义了一个名为 Person
的结构体,该结构体有两个字段 Name
和 Age
,使用 xml
标签指定了在 XML 格式中对应的元素名。在 main()
函数中,我们定义了一个 XML 格式的字符串 xmlStr
,然后使用 xml.Unmarshal()
函数将其解码成 Person
类型的变量 p
,最后打印出 p
。