Golang Tips: XML 格式数据处理

栏目: Go · 发布时间: 6年前

内容简介: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))
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

简约至上

简约至上

[英] Giles Colborne / 李松峰、秦绪文 / 人民邮电出版社 / 2011-1-1 / 35.00

追求简单易用是人类的本性,无论是互联网产品。还是移动应用。亦或其他交互式设计,简单易用始终都是赢得用户的关键。同时,简单易用的程度也与产品寿命的长短密切相关。在《简约至上:交互式设计四策略》中,作者Giles托20多年交互式设计的探索与实践。提出了合理删除、分层组织、适时隐藏和巧妙转移这四个达成简约至上的终极策略,讲述了为什么应该站在主流用户一边,以及如何从他们的真实需求和期望出发,简化设计,提升......一起来看看 《简约至上》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具

html转js在线工具
html转js在线工具

html转js在线工具