开发工具:Goland。
xml文件,解析与json文件解析非常相似。只是用了不同的包。
比如一个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>
文件中有4个字段,servers
、server
、serverName
、serverIP
,所以根据文件结构,构建两个结构体,
type server struct {
XMLName xml.Name `xml:"server"`
ServerName string `xml:"serverName"`
ServerIp string `xml:"serverIP"`
}
type Recurlyservers struct {
XMLName xml.Name `xml:"servers"`
Version string `xml:"version,attr"`
Svs []server `xml:"server"`
Description string `xml:",innerxml"`
}
接下来就是将读取到的数据,反序列化到结构体中,
func main() {
file, err := os.Open("config/servers.xml")
if err != nil {
fmt.Println(err)
}
defer file.Close()
body, err := ioutil.ReadAll(file)
data := new(Recurlyservers)
err = xml.Unmarshal(body, &data)
fmt.Println(data.XMLName)
fmt.Println(data.Description)
fmt.Println(data.Version)
fmt.Println(data.Svs)
}
运行结果
{ servers}
<server>
<serverName>Shanghai_VPN</serverName>
<serverIP>127.0.0.1</serverIP>
</server>
<server>
<serverName>Beijing_VPN</serverName>
<serverIP>127.0.0.2</serverIP>
</server>
1
[{{ server} Shanghai_VPN 127.0.0.1} {{ server} Beijing_VPN 127.0.0.2}]