go實踐二十二 使用xml

go使用xml
目錄結構如下:

 

項目根目錄是 goweb

goweb的目錄結構
├── textprocess                           # 文本文件目錄
│     ├── testxml.xml                   # xml文件
├── testxml.go                            # 業務控制
————————————————
 

下面,我們根據目錄結構,從上往下建立文件夾和文件

建立文件夾和文件 goweb/textprocess/testxml.xml,testxml.xml 內容如下:

<?xml version="1.0" encoding="utf-8"?>
<servers version="1">
    <server>
        <serverName>Shanghai_VPN</serverName>
        <serverIP>127.0.0.1</serverIP>
    </server>
    <server>
        <serverName>Beijing_VPN</serverName>
        <serverIP>127.0.0.2</serverIP>
    </server>
</servers>

建立文件夾和文件 goweb/testxml.go ,testxml.go 內容如下:

package main

import (
	"encoding/xml"
	"fmt"
	"io/ioutil"
	"os"
)


func main() {
	//讀取xml
	fmt.Println("xmlRead")
	xmlRead()

	//編寫xml
	fmt.Println()
	fmt.Println("xmlWrite")
	xmlWrite()
}


type Recurlyservers struct {
	XMLName xml.Name `xml:"servers"`
	Version string `xml:"version,attr"`
	Svs []serverRead `xml:"server"`
	Description string `xml:",innerxml"`
}

type serverRead struct {
	XMLName xml.Name `xml:"server"`
	ServerName string `xml:"serverName"`
	ServerIP string `xml:"serverIP"`
}
//讀取xml
func xmlRead(){
	file,err := os.Open("textprocess/testxml.xml") //for read access
	if err != nil{
		fmt.Printf("error:%v",err)
		return
	}
	defer file.Close()
	data,err := ioutil.ReadAll(file)
	if err != nil{
		fmt.Printf("error:%v",err)
		return
	}
	v := Recurlyservers{}
	err = xml.Unmarshal(data,&v)
	if err != nil{
		fmt.Printf("error:%v",err)
		return
	}
	fmt.Printf("%+v\n",v)
}


type Servers struct {
	XMLName xml.Name `xml:"servers"`
	Version string `xml:"version,attr"`
	Svs []serverWrite `xml:"server"`
}
type serverWrite struct {
	ServerName string `xml:"serverName"`
	ServerIP string `xml:"serverIP"`
}
//編寫xml
func xmlWrite(){
	v := &Servers{Version:"1"}
	v.Svs = append(v.Svs,serverWrite{"Shanghai_VPN","127.0.0.1"})
	v.Svs = append(v.Svs,serverWrite{"Beijing_VPN","127.0.0.2"})
	output,err := xml.MarshalIndent(v," ","  ")
	if err != nil{
		fmt.Printf("error:%v\n",err)
	}
	os.Stdout.Write([]byte(xml.Header))
	os.Stdout.Write(output)
}

模塊初始化,並運行testxml.go

# 模塊初始化
[root@izj6c4jirdug8kh3uo6rdez goweb]# go mod init goweb

# 運行testxml.go
[root@izj6c4jirdug8kh3uo6rdez goweb]# go run testxml.go
xmlRead
{XMLName:{Space: Local:servers} Version:1 Svs:[{XMLName:{Space: Local:server} ServerName:Shanghai_VPN ServerIP:127.0.0.1} {XMLName:{Space: Local:server} ServerName:Beijing_VPN ServerIP:127.0.0.2}] Description:
    <server>
        <serverName>Shanghai_VPN</serverName>
        <serverIP>127.0.0.1</serverIP>
    </server>
    <server>
        <serverName>Beijing_VPN</serverName>
        <serverIP>127.0.0.2</serverIP>
    </server>
}

xmlWrite
<?xml version="1.0" encoding="UTF-8"?>
 <servers version="1">
   <server>
     <serverName>Shanghai_VPN</serverName>
     <serverIP>127.0.0.1</serverIP>
   </server>
   <server>
     <serverName>Beijing_VPN</serverName>
     <serverIP>127.0.0.2</serverIP>
   </server>
 </servers>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章