如何使用Go语言中的XML处理函数解析XML文件并筛选节点?
encoding/xmlencoding/xmlencoding/xmlimport (
"encoding/xml"
"fmt"
"io/ioutil"
"os"
)./data.xml<?xml version="1.0" encoding="UTF-8"?>
<root>
<person>
<name>张三</name>
<age>25</age>
</person>
<person>
<name>李四</name>
<age>30</age>
</person>
<person>
<name>王五</name>
<age>35</age>
</person>
</root>Person type Person struct {
Name string `xml:"name"`
Age int `xml:"age"`
}xml.Unmarshal()func main() {
file, err := os.Open("./data.xml")
if err != nil {
fmt.Println("打开文件失败:", err)
return
}
defer file.Close()
data, err := ioutil.ReadAll(file)
if err != nil {
fmt.Println("读取文件失败:", err)
return
}
var persons []Person
err = xml.Unmarshal(data, &persons)
if err != nil {
fmt.Println("解析XML文件失败:", err)
return
}
fmt.Println(persons)
}运行以上代码,我们可以看到输出如下:
[{张三 25} {李四 30} {王五 35}]接下来,我们可以根据需要筛选出特定的节点。例如,我们只希望获取年龄大于等于30岁的人的信息,可以使用如下代码:
func main() {
file, err := os.Open("./data.xml")
if err != nil {
fmt.Println("打开文件失败:", err)
return
}
defer file.Close()
data, err := ioutil.ReadAll(file)
if err != nil {
fmt.Println("读取文件失败:", err)
return
}
var persons []Person
err = xml.Unmarshal(data, &persons)
if err != nil {
fmt.Println("解析XML文件失败:", err)
return
}
var filteredPersons []Person
for _, person := range persons {
if person.Age >= 30 {
filteredPersons = append(filteredPersons, person)
}
}
fmt.Println(filteredPersons)
}运行以上代码,我们可以看到输出如下:
[{李四 30} {王五 35}]通过以上代码示例,我们可以看到如何使用Go语言中的XML处理函数解析XML文件并筛选出所需节点。你可以根据实际需求修改代码,进行更复杂的XML解析和筛选操作。