go学习 --- 解析和生成xml文件

一、解析xml

package main

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

type Recurlyservers struct {
	XMLName xml.Name `xml:"servers"`
	Version string `xml:"version,attr"`
	Svs []server `xml:"server"`
	//整个xml文本内容
	Description string `xml:",innerxml"`
}
type server struct {
	XMLName xml.Name `xml:"server"`
	ServerName string `xml:"serverName"`
	ServerIP string `xml:"serverIP"`
}

func main() {
	//打开文件
	file, err := os.Open("D:\\goproject\\src\\webDemo\\http\\xml\\servers.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.Println(v)
}
package main

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

type Recurlystudents struct {
	XMLName xml.Name `xml:"students"`
	Version string `xml:"version,attr"`
	Students []student `xml:"student"`
	//Description string `xml:",innerxml"`
}
type student struct {
	XMLName xml.Name `xml:"student"`
	StudentName string `xml:"studentName"`
	Age int `xml:"age"`
	Sex string `xml:"sex"`
	Books Recurlybookss `xml:"books"`
}


type Recurlybookss struct {
	XMLName xml.Name `xml:"books"`
	Version string `xml:"version,attr"`
	Books []book `xml:"book"`
	//Description string `xml:",innerxml"`
}

type book struct {
	XMLName xml.Name `xml:"book"`
	BookName  string `xml:"bookName"`
	Price  string `xml:"price"`
}

func main() {
	file, err := os.Open("D:\\goproject\\src\\webDemo\\http\\xml\\students.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 := Recurlystudents{}
	err = xml.Unmarshal(data, &v)
	if err != nil {
		fmt.Printf("error: %v", err)
		return
	}
	fmt.Println(v)
}

servers.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>

student.xml

<?xml version="1.0" encoding="utf-8"?>
<students version="1">
    <student>
        <studentName>大魔王</studentName>
        <age>31</age>
        <sex>female</sex>
        <books>
            <book>
                <bookName>红与黑</bookName>
                <price>55.8</price>
            </book>
            <book>
                <bookName>呼啸山庄</bookName>
                <price>99</price>
            </book>
        </books>
    </student>
    <student>
        <studentName>王二狗</studentName>
        <age>30</age>
        <sex>male</sex>
        <books>
            <book>
                <bookName>十万个为啥</bookName>
                <price>22.8</price>
            </book>
            <book>
                <bookName>从入门到放弃</bookName>
                <price>68</price>
            </book>
        </books>
    </student>
</students>

 

 二、创建xml

package main

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

type Servers struct {
	XMLName xml.Name `xml:"servers"`
	Version string   `xml:"version,attr"`
	Svs     []server `xml:"server"`
}
type server struct {
	ServerName string `xml:"serverName"`
	ServerIP   string `xml:"serverIP"`
}

func main() {
	//写入到xml的内容
	v := &Servers{Version: "1"}
	v.Svs = append(v.Svs, server{"Shanghai_VPN", "127.0.0.1"})
	v.Svs = append(v.Svs, server{"Beijing_VPN", "127.0.0.2"})
	output, err := xml.MarshalIndent(v, " ", " ")
	if err != nil {
		fmt.Printf("error: %v\n", err)
	}
	//生成xml的头部信息
	os.Stdout.Write([]byte(xml.Header))
	os.Stdout.Write(output)

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸭鸭老板

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值