Go语言解析Xml

使用Go简简单单的解析Xml!

开始之前

1
import "encoding/xml"

简单的Xml解析

1.假设我们解析的Xml内容如下:

1
2
3
<feed>
	<person name="initcool" id="1" age=18 />
</feed>

2.接着我们构造对应的结构体

1
2
3
4
5
6
7
8
type Feed struct {
    XMLName xml.Name    `xml:"feed"`
    Person struct{
        Name string 	`xml:"name"`
        Id string       `xml:"id"`
        Age int	        `xml:"age"`
    }					`xml:"person"`
}

3.对Xml数据进行反序列化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
var feed Feed

// 读取Xml文件,并返回字节流
content,err := ioutil.ReadFile(XmlFilename)
if err != nil {
    log.Fatal(err)
}

// 将读取到的内容反序列化到feed
xml.Unmarshal(content,&feed)

带有命名空间的Xml解析

部分xml文件会带有命名空间(Namespace),也就是冒号左侧的内容,此时我们需要在go结构体的tag 中加入命名空间

1.带有命名空间(Namespace)的Xml文件

1
2
3
4
5
6
<feed xmlns:yt="http://www.youtube.com/xml/schemas/2015" xmlns:media="http://search.yahoo.com/mrss/" xmlns="http://www.w3.org/2005/Atom">
<!--  yt即是命名空间   -->
<yt:videoId>XXXXXXX</yt:videoId> 
<!--  media是另一个命名空间   -->
<media:community></media:community>
</feed>

2.针对命名空间构造结构体

1
2
3
4
5
type Feed struct {
	XMLName   xml.Name  `xml:"feed"` // 指定最外层的标签为feed
	VideoId   string    `xml:"http://www.youtube.com/xml/schemas/2015 videoId"`
    Community string    `xml:"http://search.yahoo.com/mrss/ community"`
}

3.对Xml数据进行反序列化

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
var feed Feed

// 读取Xml文件,并返回字节流
content,err := ioutil.ReadFile(XmlFilename)
if err != nil {
    log.Fatal(err)
}

// 将读取到的内容反序列化到feed
xml.Unmarshal(content,&feed)
Licensed under CC BY-NC-SA 4.0