发布时间:2024-11-23 17:31:41
type Person struct {
Name string `xml:"name"`
Age int `xml:"age"`
Email string `xml:"email"`
}
上面的代码定义了一个Person结构体,它有三个字段:Name、Age和Email。这些字段用反引号括起来的xml标记来注释,这样golang就知道如何解析XML文档中相应的元素。
接下来,我们需要读取XML文档并解析它。使用`Decode()`函数可以轻松地完成这个任务:
func main() {
xmlData := `
John Doe
30
john.doe@example.com
`
var person Person
err := xml.Unmarshal([]byte(xmlData), &person)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Name: %s\n", person.Name)
fmt.Printf("Age: %d\n", person.Age)
fmt.Printf("Email: %s\n", person.Email)
}
上述代码中,我们定义了一个包含XML数据的字符串`xmlData`。然后,我们创建了一个Person变量,并使用`Unmarshal()`函数解析XML数据。如果解析过程中出现错误,我们会打印错误信息并退出程序。
最后,我们打印解析后的Person结构体的各个字段的值。
生成XML
除了解析XML数据外,还可以使用golang来生成XML文档。同样,我们需要定义一个结构体来表示XML文档的结构。 下面是一个示例:
type Person struct {
XMLName xml.Name `xml:"person"`
Name string `xml:"name"`
Age int `xml:"age"`
Email string `xml:"email"`
}
注意,结构体中的字段名还必须大写,以便golang的xml包可以正确处理它们。
接下来,我们创建一个Person类型的实例,并填充它的字段:
func main() {
person := Person{
Name: "John Doe",
Age: 30,
Email: "john.doe@example.com",
}
xmlData, err := xml.MarshalIndent(person, "", " ")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(xmlData))
}
在上述代码中,我们创建了一个名为`person`的Person实例,并为其字段赋值。
然后,我们使用`MarshalIndent()`函数将person对象编码为XML格式的字节切片。第一个参数是要编码的对象,第二个参数是XML编码时的前缀,第三个参数是XML编码时的缩进字符串。
最后,我们打印生成的XML文档。