使用Go解析使用CDATA的XML

时间:2018-03-27 09:12:57

标签: xml go

我是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)

1 个答案:

答案 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解组很好。

我在Go Playground

上创建了一个完整的例子