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>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值