闽公网安备 35020302035485号
6.基于 Go 的 encoding/xml 包构建
doc := etree.NewDocument()
if err := doc.ReadFromFile("bookstore.xml"); err != nil {
panic(err)
}
可以用 etree.Element 结构体来表示 XML 文档中的元素,它有一些方法来创建、获取或修改元素的属性、子元素、文本内容等,例如:root := doc.SelectElement("bookstore")
book := root.CreateElement("book")
book.CreateAttr("category", "WEB")
title := book.CreateElement("title")
title.SetText("Go in Action")
可以用 etree.Path 函数来根据类似 XPath 的路径表达式来查找元素,例如:books := root.SelectElements("book")
for _, book := range books {
title := book.SelectElement("title")
fmt.Println(title.Text())
}
可以用 etree.Write* 系列函数来将 XML 文档写入不同的目标,例如:doc.Indent(2) doc.WriteTo(os.Stdout)
<students>
<student id="1">
<name>Tom</name>
<age>18</age>
<score>90</score>
</student>
<student id="2">
<name>Alice</name>
<age>19</age>
<score>95</score>
</student>
<student id="3">
<name>Bob</name>
<age>20</age>
<score>85</score>
</student>
</students>
你想用 etree 来读取这个文件,并对其中的元素进行一些操作,例如:.将修改后的 XML 文档保存到一个新的文件中
package main
import (
"fmt"
"github.com/beevik/etree"
)
func main() {
// 堆代码 duidaima.com
// 创建一个新的 XML 文档对象
doc := etree.NewDocument()
// 从文件中读取 XML 文档内容
if err := doc.ReadFromFile("students.xml"); err != nil {
panic(err)
}
// 获取根元素 students
root := doc.SelectElement("students")
// 遍历根元素的所有子元素 student
for _, student := range root.SelectElements("student") {
// 获取 student 元素的 id 属性值
id := student.SelectAttrValue("id", "unknown")
// 获取 student 元素的 name 子元素的文本内容
name := student.SelectElement("name").Text()
// 获取 student 元素的 score 子元素的文本内容
score := student.SelectElement("score").Text()
// 打印出 id, name 和 score
fmt.Printf("Student %s: %s, %s\n", id, name, score)
}
// 修改第二个 student 元素的 score 子元素的文本内容为 100
root.SelectElement("student[2]").SelectElement("score").SetText("100")
// 删除第三个 student 元素
root.RemoveChild(root.SelectElement("student[3]"))
// 添加一个新的 student 元素
newStudent := root.CreateElement("student")
newStudent.CreateAttr("id", "4")
newStudent.CreateElement("name").SetText("Cathy")
newStudent.CreateElement("age").SetText("21")
newStudent.CreateElement("score").SetText("88")
// 将修改后的 XML 文档保存到一个新的文件中
doc.Indent(2)
doc.WriteToFile("new_students.xml")
}
运行这段代码后,你会看到以下的输出:Student 1: Tom, 90 Student 2: Alice, 95 Student 3: Bob, 85并且,你会在当前目录下生成一个新的文件 new_students.xml,它的内容是这样的:
<students>
<student id="1">
<name>Tom</name>
<age>18</age>
<score>90</score>
</student>
<student id="2">
<name>Alice</name>
<age>19</age>
<score>100</score>
</student>
<student id="4">
<name>Cathy</name>
<age>21</age>
<score>88</score>
</student>
</students>
etree 的优缺点4.它不支持处理 XML 文档中的 CDATA 节或注释