Go比較好用的解析xml文件的插件etree

Go 中的 encoding/xml包給咱們提供的解析xml文件的兩種方法,一種是根據xml結構定義對應的結構體進行解析,另外一種是xml.Token()。(我的看法,歡迎指正)前者應用於已知xml文件標籤名和結構狀況下很方便,可是未知xml標籤名或結構就無從下手,後者則極爲麻煩。所以在github上找到了 etree 插件git

etree插件

地址:github.com/beevik/etre…github

etree是一個輕量型的純go包,以元素樹的形式表示XML,簡化了Go解析XML格式文件的複雜度ui

它包含的功能和特性:url

  • 將XML文檔表示爲元素樹(element tree)以便於遍歷
  • files[]byte slicesstringsio interface讀寫XML
  • 使用空格或者製表符自動縮進XML,提升可讀性
  • 底層是 go encoding/xml

讀取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() //獲取該節點的文本值 返回值是 字符串類型
複製代碼

建立並寫入XML文檔

從頭開始建立並寫入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)
}
複製代碼
相關文章
相關標籤/搜索