我是Golang的新手,我一直试图通过定义结构并使用xml.Unmarshal来解析Go中的xml。没有抛出错误但结构为空。 这是我的xml:
var bodyXML = []byte('<?xml version="1.0" encoding="ISO-8859-1"?>
<smsBatchResponse>
<ok>
<![CDATA[CHECK_OK]]>
</ok>
</smsBatchResponse>')
这是我的代码:
type SmsBatchResponse struct {
Ok string `xml:"ok"`
}
var result SmsBatchResponse
xml.Unmarshal(bodyXML,result)
fmt.Println(result)
答案 0 :(得分:3)
你应该做的第一件事是不忽略xml.Unmarshal
可以给你的任何错误:
if err := xml.Unmarshal(bodyXML, result); err != nil {
fmt.Println(err)
}
这会(最终)给你一些错误:
错误编号1:默认情况下,XML解码器希望XML以UTF-8编码。您正在提供ISO-8859-1。这可以通过将XML编码更改为UTF-8来轻松修复;或者通过手动创建xml.Decoder
并设置CharsetReader
成员。
错误编号2:解组时,XML解码器需要指针,因为它需要修改传入的结构:
if err := xml.Unmarshal(bodyXML, &result); err != nil {
....
}
注意结果前面的&
。
当你修复这些错误时,XML解组很好。
上创建了一个完整的例子