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>