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>