分享
go编程之XML文件解析
xixionedream · · 5207 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
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")
iferr!=nil{
fmt.Println("openxmlfileerror")
return
}
deferfile.Close()
data,err:=ioutil.ReadAll(file)
iferr!=nil{
fmt.Println("readfilestreamerror")
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
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信5207 次点击
上一篇:基于Go的D-Bus框架(三)
下一篇:go学习笔记:1.1变量
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
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")
iferr!=nil{
fmt.Println("openxmlfileerror")
return
}
deferfile.Close()
data,err:=ioutil.ReadAll(file)
iferr!=nil{
fmt.Println("readfilestreamerror")
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