xml - 使用 Go 使用 CDATA 解析 XML

标签 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)

最佳答案

您应该做的第一件事是不要忽略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/

相关文章:

java - 从 XML 读取信用卡号列表

java - XML 响应导致 JAVA 卡住

c# - 向用户呈现文件的 XML 值的最佳方式?

java - JAXB -EclipseLink MOXy-嵌套复合对象未正确编码

pointers - 在指针方法 Go 中初始化指针接收器

python - 使用 Python 替换 XML 文档中的数字字符引用

performance - Go:Seek+Write 与 WriteAt 性能对比

go - 为 Debian 打包 Go 应用程序

go - 围棋练习之旅#10 : Crawler

go - 处理 goroutine 时的奇怪事情