Go解析XML文件
在本教程中,我们将介绍如何有效读取XML文件,使用Go的encoding / xml包解析xml,遍历多个嵌套的xml元素,然后将其打印到终端

##XML示例文件
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user type="admin">
<name>Elliot</name>
<social>
<facebook>https://facebook.com</facebook>
<twitter>https://twitter.com</twitter>
<youtube>https://youtube.com</youtube>
</social>
</user>
<user type="reader">
<name>Fraser</name>
<social>
<facebook>https://facebook.com</facebook>
<twitter>https://twitter.com</twitter>
<youtube>https://youtube.com</youtube>
</social>
</user>
</users>
##完成代码部分
package main
import (
"encoding/xml"
"fmt"
"io/ioutil"
"os"
)
type Users struct {
XMLName xml.Name `xml:"users"`
Users []User `xml:"user"`
}
type User struct {
XMLName xml.Name `xml:"user"`
Type string `xml:"type,attr"`
Name string `xml:"name"`
Social Social `xml:"social"`
}
type Social struct {
XMLName xml.Name `xml:"social"`
Facebook string `xml:"facebook"`
Twitter string `xml:"twitter"`
Youtube string `xml:"youtube"`
}
func main() {
xmlFile, err := os.Open("users.xml")
if err != nil {
fmt.Println(err)
}
fmt.Println("成功打开 users.xml")
defer xmlFile.Close()
// 读取 xmlFile 到 byte array.
byteValue, _ := ioutil.ReadAll(xmlFile)
// 初始化 Users array
var users Users
xml.Unmarshal(byteValue, &users)
for i := 0; i < len(users.Users); i++ {
fmt.Println("User Type: " + users.Users[i].Type)
fmt.Println("User Name: " + users.Users[i].Name)
fmt.Println("Facebook Url: " + users.Users[i].Social.Facebook)
}
}
运行
$ go run main.go
成功打开 users.xml
User Type: admin
User Name: Elliot
Facebook Url: https://facebook.com
User Type: reader
User Name: Fraser
Facebook Url: https://facebook.com
最后修改于 2019-07-30