日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GO教程:Go語言XML文件的讀寫操作

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

在 JSON 還未像現(xiàn)在這么廣泛使用時,XML 的使用相當廣泛。XML 作為一種數(shù)據(jù)交換和信息傳遞的格式,使用還是很廣泛的,現(xiàn)在很多開放平臺接口,基本都會支持 XML 格式。

Go語言內(nèi)置的 encoding/xml 包可以用在結(jié)構(gòu)體和 XML 格式之間進行編解碼,其方式跟 encoding/json 包類似。然而與 JSON 相比 XML 的編碼和解碼在功能上更苛刻得多,這是由于 encoding/xml 包要求結(jié)構(gòu)體的字段包含格式合理的標簽,而 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() {
    //實例化對象
    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("編碼錯誤:", err.Error())
        return
    } else {
        fmt.Println("編碼成功")
    }
}

運行上面的代碼會在當前目錄生成一個 info.xml 文件,文件的內(nèi)容如下所示:


    http://c.biancheng.net/golang/
    Go語言入門教程
    Golang入門教程

讀 XML 文件

讀 XML 文件比寫 XML 文件稍微復(fù)雜,特別是在必須處理一些我們自定義字段的時候(例如日期)。但是,如果我們使用合理的打上 XML 標簽的結(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
解碼成功
{C語言中文網(wǎng) http://c.biancheng.net/golang/ [Go語言入門教程 Golang入門教程]}

正如寫 XML 時一樣,我們無需關(guān)心對所讀取的 XML 數(shù)據(jù)進行轉(zhuǎn)義,xml.NewDecoder.Decode() 函數(shù)會自動處理這些。

xml 包還支持更為復(fù)雜的標簽,包括嵌套。例如標簽名為 'xml:"Books>Author"' 產(chǎn)生的是 content 這樣的 XML 內(nèi)容。同時除了 'xml:", attr"' 之外,該包還支持 'xml:",chardata"' 這樣的標簽表示將該字段當做字符數(shù)據(jù)來寫,支持 'xml:",innerxml"' 這樣的標簽表示按照字面量來寫該字段,以及 'xml:",comment"' 這樣的標簽表示將該字段當做 XML 注釋。因此,通過使用標簽化的結(jié)構(gòu)體,我們可以充分利用好這些方便的編碼解碼函數(shù),同時合理控制如何讀寫 XML 數(shù)據(jù)。


文章名稱:創(chuàng)新互聯(lián)GO教程:Go語言XML文件的讀寫操作
標題網(wǎng)址:http://m.5511xx.com/article/dhhcdjo.html