新聞中心
XML(extensible Markup Language)格式被廣泛用作一種數(shù)據(jù)交換格式,并且自成一種文件格式。與上一節(jié)介紹的 JSON 相比 XML 要復(fù)雜得多,而且手動(dòng)寫起來相對乏味得多。

在 JSON 還未像現(xiàn)在這么廣泛使用時(shí),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 格式卻不需要。
寫 XML 文件
使用 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() {
//實(shí)例化對象
info := Website{"C語言中文網(wǎng)", "http://c.biancheng.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("編碼錯(cuò)誤:", err.Error())
return
} else {
fmt.Println("編碼成功")
}
}
運(yùn)行上面的代碼會在當(dāng)前目錄生成一個(gè) info.xml 文件,文件的內(nèi)容如下所示:
讀 XML 文件
讀 XML 文件比寫 XML 文件稍微復(fù)雜,特別是在必須處理一些我們自定義字段的時(shí)候(例如日期)。但是,如果我們使用合理的打上 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)
}
}
運(yùn)行結(jié)果如下:
go run main.go
解碼成功
{C語言中文網(wǎng) http://c.biancheng.net/golang/ [Go語言入門教程 Golang入門教程]}
正如寫 XML 時(shí)一樣,我們無需關(guān)心對所讀取的 XML 數(shù)據(jù)進(jìn)行轉(zhuǎn)義,xml.NewDecoder.Decode() 函數(shù)會自動(dòng)處理這些。
xml 包還支持更為復(fù)雜的標(biāo)簽,包括嵌套。例如標(biāo)簽名為 'xml:"Books>Author"' 產(chǎn)生的是
標(biāo)題名稱:創(chuàng)新互聯(lián)GO教程:Go語言XML文件的讀寫操作
當(dāng)前鏈接:http://fisionsoft.com.cn/article/dhhcdjo.html


咨詢
建站咨詢
