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)
}
複製代碼