一、解析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)
}