开始之前
简单的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)
|