使用GO用CDATA解析XML



我是Golang的新手,我一直在试图通过定义structs和xml.unmarshal.unmarshal.ner to the the丢弃,但结构是空的。这是我的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解码器期望A pointer ,因为它需要 modify 在struct中传递:

if err := xml.Unmarshal(bodyXML, &result); err != nil {
    ....
}

注意结果前面的&

修复这些错误时,XML可以很好地删除。

我在Go Playground上创建了一个完全有效的示例

最新更新