go编程之XML文件解析

xixionedream · · 4542 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

       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





       

  


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:xixionedream

查看原文:go编程之XML文件解析

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4542 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传