我是 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)
最佳答案
您应该做的第一件事是不要忽略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 解码正常。
我已经在 Go Playground 上创建了一个完整的示例
关于xml - 使用 Go 使用 CDATA 解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49508812/