发布时间:2024-11-21 22:33:29
import "encoding/xml"
type Person struct {
Name string `xml:"name"`
Age int `xml:"age"`
City string `xml:"city,omitempty"`
}
func main() {
data := []byte(`<person><name>John</name><age>30</age></person>`)
var person Person
err := xml.Unmarshal(data, &person)
if err != nil {
fmt.Println("Error parsing XML:", err)
return
}
fmt.Printf("Name: %s\n", person.Name)
fmt.Printf("Age: %d\n", person.Age)
}
在上面的代码段中,我们首先定义了一个名为Person的结构体,其中包含了XML文件中我们感兴趣的字段。XML标签被用作结构体字段的元数据,以指示如何从XML解析或编组该字段。 接下来,我们在main函数中创建了一个指向Person结构体的变量。然后,我们使用xml.Unmarshal()函数将XML数据解析到该变量中。如果解析过程中发生错误,我们将在控制台输出错误消息。否则,我们将打印出解析后的字段值。type People struct {
XMLName xml.Name `xml:"people"`
Persons []Person `xml:"person"`
}
在上面的代码中,我们首先定义了一个名为People的结构体,并使用xml.Name字段指定了根元素的名称。然后,我们定义了一个名为Persons的Person结构体切片,用于存储XML中包含的所有Person对象。 然后,我们可以将XML数据解析到People结构体中,以获取所有Person对象的列表。以下是示例代码:data := []byte(`<people><person><name>John</name><age>30</age></person><person><name>Jane</name><age>25</age></person></people>`)
var people People
err := xml.Unmarshal(data, &people)
if err != nil {
fmt.Println("Error parsing XML:", err)
return
}
for _, person := range people.Persons {
fmt.Printf("Name: %s\n", person.Name)
fmt.Printf("Age: %d\n", person.Age)
}
在上面的代码中,我们首先创建了一个包含两个Person对象的XML数据。然后,我们定义了一个People结构体变量,并将XML数据解析到该变量中。最后,我们使用for循环遍历People结构体中的每个Person对象,并打印出其字段值。