XML俨然已经称为我们程序开中一种数据交换和信息传递不可缺少的一枚角色,当然任何语言对XML的解析支持都不可或缺,今天我们一起学习学习go的xml解析。
需要解析的XML文件:student.xml
xml文件内容:
<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?> <students version="1"> <student> <studentName>xixi</studentName> <studentId>3100561007</studentId> </student> <student> <studentName>xiaoq</studentName> <studentId>3100263101</studentId> </student> </students></span>xml文件包含学生实体信息,xml版本,xml名字等信息,我们需要做的就是通过go程序去取到这些信息。
在go语言中我们进行xml解析用到的包为 encoding/xml,主要方法为
func Unmarshal(data []byte, v interface{}) error
引入需要使用的go标准库 :
import ( "encoding/xml" "fmt" "io/ioutil" "os" )定义我们XML与内存映射的结构体来接受数据:(注意:结构体描述信息中的字段需要与xml中的一一对应,并且要区分大小写,不然解析的时候会出错)
type Student struct { XMLName xml.Name `xml:"student"` StudentName string `xml:"studentName"` StudentId string `xml:"studentId"` } type RecurlyStudents struct { XMLName xml.Name `xml:"students"` Version string `xml:"version,attr"` Stustruct []Student `xml:"student"` Description string `xml:",innerxml"` }加载xml文件,并读取文件信息到data中:
<span style="white-space:pre"> </span><pre style="margin-top: 0px; margin-bottom: 0px;"><span style=" color:#c0c0c0;"> </span>fmt.Println(<span style=" color:#008000;">"------------xml</span><span style=" color:#c0c0c0;"> </span><span style=" color:#008000;">解析-----------"</span>)
file, err := os.Open("student.xml")
if err != nil {
fmt.Println("open xml file error")
return
}
defer file.Close()
data, err := ioutil.ReadAll(file)
if err != nil {
fmt.Println("read file stream error")
return
}
解析xml文件并输出:
stus := RecurlyStudents{} err = xml.Unmarshal(data, &stus) if err != nil { fmt.Println("format xml data failed") return } fmt.Println("Description:" + stus.Description) fmt.Printf("XMLName:%v\n", stus.XMLName) fmt.Println("XMLVersion:" + stus.Version) for index, stu := range stus.Stustruct { fmt.Printf("the %d student,name:%s\n", index+1, stu.StudentName) fmt.Printf("the %d student,id:%s\n", index+1, stu.StudentId) }over
有疑问加站长微信联系(非本文作者)