Go 中的 encoding/xml
包给咱们提供的解析xml文件的两种方法,一种是根据xml结构定义对应的结构体进行解析,另外一种是xml.Token()。(我的看法,欢迎指正)前者应用于已知xml文件标签名和结构状况下很方便,可是未知xml标签名或结构就无从下手,后者则极为麻烦。所以在github上找到了 etree 插件git
地址:github.com/beevik/etre…github
etree是一个轻量型的纯go包,以元素树的形式表示XML,简化了Go解析XML格式文件的复杂度ui
它包含的功能和特性:url
files
、[]byte slices
、strings
和io interface
读写XML读取XML文档内容到 etree document中spa
doc := etree.NewDocument()
err := doc.ReadFromFile(url)
if err !=nil {
panic(err)
}
复制代码
获取节点,文本值,属性以及属性值插件
element := doc.SelectElement("log") // 查找标签名为 log 的节点
events := element.ChildElements() // 获取 element 的全部子节点
event := events[0]
event.Tag // 获取该节点的标签名
event.Attr // 获取该节点下全部属性
event.Attr[0].Value // 获取该节点下第一个属性对应的值
event.Text() //获取该节点的文本值 返回值是 字符串类型
复制代码
从头开始建立并写入code
doc := etree.NewDocument()
doc.CreateProcInst("xml", `version="1.0" encoding="UTF-8"`)
doc.CreateProcInst("xml-stylesheet", `type="text/xsl" href="style.xsl"`)
people := doc.CreateElement("People") //建立节点,标签名为 People
people.CreateComment("These are all known people") //写入文本值
jon := people.CreateElement("Person")
jon.CreateAttr("name", "Jon") // 建立属性名为 name ,对应的值为 Jon
sally := people.CreateElement("Person")
sally.CreateAttr("name", "Sally")
doc.Indent(2) // 缩进 2 个单位
err := doc.WriteToFile(path) // 输出到路径为 path 的文件内
if err !=nil {
panic(err)
}
复制代码