您好,登錄后才能下訂單哦!
這篇文章主要介紹“Go語言中XML文件的讀寫操作方法有哪些”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Go語言中XML文件的讀寫操作方法有哪些”文章能幫助大家解決問題。
XML(extensible Markup Language)格式被廣泛用作一種數(shù)據(jù)交換格式,并且自成一種文件格式。與上一節(jié)介紹的 JSON 相比 XML 要復(fù)雜得多,而且手動寫起來相對乏味得多。
在 JSON 還未像現(xiàn)在這么廣泛使用時,XML 的使用相當(dāng)廣泛。XML 作為一種數(shù)據(jù)交換和信息傳遞的格式,使用還是很廣泛的,現(xiàn)在很多開放平臺接口,基本都會支持 XML 格式。
Go語言內(nèi)置的 encoding/xml 包可以用在結(jié)構(gòu)體和 XML 格式之間進(jìn)行編解碼,其方式跟 encoding/json 包類似。然而與 JSON 相比 XML 的編碼和解碼在功能上更苛刻得多,這是由于 encoding/xml 包要求結(jié)構(gòu)體的字段包含格式合理的標(biāo)簽,而 JSON 格式卻不需要。
使用 encoidng/xml 包可以很方便的將 xml 數(shù)據(jù)存儲到文件中,示例代碼如下:
package main import ( "encoding/xml" "fmt" "os" ) type Website struct { Name string `xml:"name,attr"` Url string Course []string } func main() { //實例化對象 info := Website{"億速云", "http://jb51.net/golang/", []string{"Go語言入門教程", "Golang入門教程"}} f, err := os.Create("./info.xml") if err != nil { fmt.Println("文件創(chuàng)建失敗", err.Error()) return } defer f.Close() //序列化到文件中 encoder := xml.NewEncoder(f) err = encoder.Encode(info) if err != nil { fmt.Println("編碼錯誤:", err.Error()) return } else { fmt.Println("編碼成功") } }
運行上面的代碼會在當(dāng)前目錄生成一個 info.xml 文件,文件的內(nèi)容如下所示:
<Website name="億速云"> <Url>http://jb51.net/golang/</Url> <Course>Go語言入門教程</Course> <Course>Golang入門教程</Course> </Website>
讀 XML 文件比寫 XML 文件稍微復(fù)雜,特別是在必須處理一些我們自定義字段的時候(例如日期)。但是,如果我們使用合理的打上 XML 標(biāo)簽的結(jié)構(gòu)體,就不會復(fù)雜。示例代碼如下:
package main import ( "encoding/xml" "fmt" "os" ) type Website struct { Name string `xml:"name,attr"` Url string Course []string } func main() { //打開xml文件 file, err := os.Open("./info.xml") if err != nil { fmt.Printf("文件打開失?。?v", err) return } defer file.Close() info := Website{} //創(chuàng)建 xml 解碼器 decoder := xml.NewDecoder(file) err = decoder.Decode(&info) if err != nil { fmt.Printf("解碼失?。?v", err) return } else { fmt.Println("解碼成功") fmt.Println(info) } }
運行結(jié)果如下:
go run main.go
解碼成功
正如寫 XML 時一樣,我們無需關(guān)心對所讀取的 XML 數(shù)據(jù)進(jìn)行轉(zhuǎn)義,xml.NewDecoder.Decode() 函數(shù)會自動處理這些。
xml 包還支持更為復(fù)雜的標(biāo)簽,包括嵌套。例如標(biāo)簽名為 'xml:"Books>Author"' 產(chǎn)生的是 <Books><Author>content</Author></Books> 這樣的 XML 內(nèi)容。同時除了 'xml:", attr"' 之外,該包還支持 'xml:",chardata"' 這樣的標(biāo)簽表示將該字段當(dāng)做字符數(shù)據(jù)來寫,支持 'xml:",innerxml"' 這樣的標(biāo)簽表示按照字面量來寫該字段,以及 'xml:",comment"' 這樣的標(biāo)簽表示將該字段當(dāng)做 XML 注釋。因此,通過使用標(biāo)簽化的結(jié)構(gòu)體,我們可以充分利用好這些方便的編碼解碼函數(shù),同時合理控制如何讀寫 XML 數(shù)據(jù)。
關(guān)于“Go語言中XML文件的讀寫操作方法有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。