内容简介: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) —数据处理前的准备
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。