Go语言 XML生成和解析
生活随笔
收集整理的這篇文章主要介紹了
Go语言 XML生成和解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
XML是指可擴展標記語言(eXtensible MarkupLanguage),它是一種標記語言。它被設計的宗旨是描述數據(XML),而非顯示數據(HTML)。
在日常開發中是比較流行的傳輸和存儲數據結構。
Go語言中,我們用xml包的Unmarshal來解析XML文檔,MarshalIndent來生成XML文檔。
XML文檔實例
<?xml version="1.0" encoding="utf-8"?> <devices version="1"><device><deviceName>智能攝像頭</deviceName><deviceCode>100000000001</deviceCode><deviceDate>2020-03-01</deviceDate></device><device><deviceName>智能挖掘機</deviceName><deviceCode>200000000001</deviceCode><deviceDate>2020-03-01</deviceDate></device> </devices>定義結構
type Device struct {XMLName xml.Name `xml:"devices"`Version string `xml:"version,attr"`Device []DeviceNode `xml:"device"`Description string `xml:",innerxml"` }type DeviceNode struct {XMLName xml.Name `xml:"device"`DeviceName string `xml:"deviceName"`DeviceCode string `xml:"deviceCode"`DeviceDate string `xml:"deviceDate"` }Tag解釋
- "-",字段不會輸出
- "name,attr",以name作為屬性名,字段值作為輸出這個XML元素的屬性
- ",attr",以這個結構體struct的字段名作為屬性名輸出XML元素的屬性,name默認是字段名
- ",chardata",輸出XML元素為character data而非element。
- ",innerxml",原樣輸出,不進行常規的編碼過程
- ",comment",作為XML注釋來輸出,不進行編碼過程,字段中不能有“--”字符串
- "omitempty",若字段值為空、那么字段不會被輸出到XML,空值有:false、0、nil指針,nil接口,任意長度為0的Slice、數組結構、Map結構或者string
生成XML
var o = Device{}o.Device = append(o.Device, DeviceNode{DeviceName: "電腦",DeviceCode: "300000000001",DeviceDate: "2020-01-01",})o.Device = append(o.Device, DeviceNode{DeviceName: "游戲機",DeviceCode: "400000000001",DeviceDate: "2020-01-02",})o.Device = append(o.Device, DeviceNode{DeviceName: "蘋果手機",DeviceCode: "500000000001",DeviceDate: "2020-01-03",})resXML, err := xml.MarshalIndent(o, " ", " ")if err != nil {fmt.Printf("marshal xml err :%v\n", err)return}_, _ = os.Stdout.Write([]byte(xml.Header))_, _ = os.Stdout.Write(resXML)解析XML
file := "./device.xml"fd, err := os.Open(file)if err != nil {fmt.Printf("open file err : %v\n", err)return}defer fd.Close()fileContent, err := ioutil.ReadAll(fd)if err != nil {fmt.Printf("read file err : %v\n", err)return}var device = Device{}err = xml.Unmarshal(fileContent, &device)if err != nil {fmt.Printf("unmarshal err : %v\n", err)return}for idx, node := range device.Device {fmt.Printf("序號:[%d],設備名:[%s],設備編碼:[%s],設備日期:[%s]\n",idx, node.DeviceName, node.DeviceCode, node.DeviceDate)}運行結果
?
?
總結
以上是生活随笔為你收集整理的Go语言 XML生成和解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Go语言 模糊搜索实验(一)
- 下一篇: .NET框架程序设计--Globally