关于go将xml数据转换为struct

chengtaozou · 2018-01-07 15:58:16 · 6989 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-01-07 15:58:16 的主题,其中的信息可能已经有所发展或是发生改变。

目前在用go开发一个微信公众号,所以碰到xml转换的问题,类似< ![CDATA[toUser] ]>< ![CDATA[FromUser] ]>123456789< ![CDATA[event] ]>< ![CDATA[subscribe] ]>这种的微信推送过来的xml数据,要怎么转换为struct类型??


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

6989 次点击  
加入收藏 微博
10 回复  |  直到 2018-01-21 16:23:58
polaris
polaris · #1 · 7年之前

类似这么定义:

type CData struct {
    Val string `xml:",cdata"`
}

可以参考 studygolang 的相关代码:https://github.com/studygolang/studygolang/blob/master/src/model/wechat_msg.go

chengtaozou
chengtaozou · #2 · 7年之前
polarispolaris #1 回复

类似这么定义: ```go type CData struct { Val string `xml:",cdata"` } ``` 可以参考 studygolang 的相关代码:https://github.com/studygolang/studygolang/blob/master/src/model/wechat_msg.go

我刚试了不行啊 这是代码

type CData struct {
    Val string `xml:",cdata"`
}

type EventPush struct {
    XMLName      xml.Name `xml:"xml"`
    ToUserName   *CData
    FromUserName *CData
    CreateTime   uint64
    MsgType      *CData
    Event        *CData
}

func main() {
    var event EventPush
    var xmlString = "< ![CDATA[toUser] ]>< ![CDATA[FromUser] ]>123456789< ![CDATA[event] ]>< ![CDATA[subscribe] ]>"
    xml.Unmarshal([]byte(xmlString), &event)
    fmt.Println(event)
}

打印结果是这样的:{{ xml} 0xc042030300 <nil> 0 <nil> <nil>}

chengtaozou
chengtaozou · #3 · 7年之前
polarispolaris #1 回复

类似这么定义: ```go type CData struct { Val string `xml:",cdata"` } ``` 可以参考 studygolang 的相关代码:https://github.com/studygolang/studygolang/blob/master/src/model/wechat_msg.go

搞错了,代码我截图 QQ图片20180107162120.png

结果是{{ xml} 0xc042030300 <nil> 0 <nil> <nil>}

polaris
polaris · #4 · 7年之前

目测是因为你的 xml 格式不对,CDATA 前后多了空格吧,应该是这样的:

<![CDATA[ ... ]]>

chengtaozou
chengtaozou · #5 · 7年之前
polarispolaris #4 回复

目测是因为你的 xml 格式不对,CDATA 前后多了空格吧,应该是这样的: ``

不是这个原因啊,而且这个xml格式我是直接复制微信平台的示例的

czyt
czyt · #6 · 7年之前

刚好在张子阳的博客看到相关的内容,贴出来供您参考 QQ截图20180114121039.jpg 原文链接在这里http://www.tracefact.net/tech/045.html

jiang091308111
jiang091308111 · #7 · 7年之前

你那符合xml格式吗?怎么看也不是啊。

chengtaozou
chengtaozou · #8 · 7年之前

@czyt 谢谢,已经解决了

chengtaozou
chengtaozou · #9 · 7年之前

@jiang091308111 已经解决了,谢谢

xialeistudio
xialeistudio · #10 · 7年之前

你可能需要的是这个

https://github.com/goctx/wechat

golang微信公众平台开发

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传