内容简介:Golang Tips: XML 格式数据处理
最近打算开发一个微信公众号, 发现微信公众号的 API 要求的返回值必须是 XML 格式, 于是便研究了下如何使用 Golang 处理 XML 格式的数据, 发现 Golang 标准库就支持 XML 的编码和解码, 使用起来非常简单.
使用 Golang 将 XML 数据反序列化为结构体
首先看一下如何将一段表示微信图文消息的 XML 数据反序列化为 Golang 的结构体:
package main
import (
"encoding/XML"
"fmt"
)
type WXNewsMsg struct {
ToUserName string `XML:"ToUserName"`
FromUserName string `XML:"FromUserName"`
CreateTime uint64 `XML:"CreateTime"`
MsgType string `XML:"MsgType"`
ArticleCount uint32 `XML:"ArticleCount"`
Articles []WXArticlesItem `XML:"Articles>item"`
}
type WXArticlesItem struct {
Title string `XML:"Title"`
Description string `XML:"Description"`
PicUrl string `XML:"PicUrl"`
Url string `XML:"Url"`
}
func main() {
XMLStr := `
<XML>
<ToUserName>To CodeKillerTips</ToUserName>
<FromUserName>From CodeKillerTips</FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType>news</MsgType>
<ArticleCount>2</ArticleCount>
<Articles>
<item>
<Title>标题111</Title>
<Description>内容111</Description>
<PicUrl>图片URL111</PicUrl>
<Url>图文跳转链接111</Url>
</item>
<item>
<Title>标题222</Title>
<Description>内容222</Description>
<PicUrl>图片URL222</PicUrl>
<Url>图文跳转链接222</Url>
</item>
</Articles>
</XML>
`
v := WXNewsMsg{}
err := XML.Unmarshal([]byte(XMLStr), &v)
if err != nil {
fmt.Println("XML.Unmarshal err:", err)
return
}
fmt.Println("ToUserName:", v.ToUserName)
fmt.Println("MsgType:", v.MsgType)
fmt.Println("ArticleCount:", v.ArticleCount)
fmt.Println("Article 1 title:", v.Articles[0].Title)
fmt.Println("Article 2 URL:", v.Articles[1].Url)
}
带属性的 XML 数据解码:
package main
import (
"encoding/XML"
"fmt"
)
func main() {
type Email struct {
Where string `XML:"where,attr"`
Addr string
}
type Result struct {
XMLName XML.Name `XML:"Person"`
Email []Email
}
v := Result{}
data := `
<Person>
<Email where="home">
<Addr>gre@example.com</Addr>
</Email>
<Email where='work'>
<Addr>gre@work.com</Addr>
</Email>
</Person>
`
err := XML.Unmarshal([]byte(data), &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Printf("XMLName: %#v\n", v.XMLName)
fmt.Printf("Email num: %d\n", len(v.Email))
fmt.Printf("Email: %v\n", v.Email)
}
使用 Golang 将结构体序列化为 XML 数据
看了上面反序列化的例子, 然后在序列化结构体是非常简单的, 下面是例子:
package main
import (
"encoding/XML"
"fmt"
)
func main() {
type Email struct {
Where string `XML:"where,attr"`
Addr string
}
type Result struct {
XMLName XML.Name `XML:"Person"`
Email []Email
}
v := Result{}
v.Email = append(v.Email, Email{Where: "work", Addr: "ck@work.com"})
v.Email = append(v.Email, Email{Where: "home", Addr: "ck@home.com"})
XMLData, err := XML.Marshal(v)
if err != nil {
fmt.Println("XML.Marshal err:", err)
return
}
fmt.Println("XMLData:", string(XMLData))
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- MapReuce中对大数据处理最合适的数据格式是什么?
- Python数据处理(一):处理 JSON、XML、CSV 三种格式数据
- Python数据处理(二):处理 Excel 数据
- R|数据处理|因子型数据
- 大数据 -- 下一代数据处理技术
- Python数据抓取(1) —数据处理前的准备
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。