使用GOLANG使用CDATA解组XML

使用GOLANG使用CDATA解组XML,xml,go,unmarshalling,Xml,Go,Unmarshalling,我正在尝试解组一个包含CDATA字段的XML文件。首先,我构建一个结构体或XML文件。下面是一个简短的视图。A已在结构中添加了chardata标记 type Ad struct { XMLName xml.Name `xml:"ad"` Remark string `xml:"remark,chardata"` } 但是当我执行xml.Unmarshal操作时,我得到了注释

我正在尝试解组一个包含CDATA字段的XML文件。首先,我构建一个结构体或XML文件。下面是一个简短的视图。A已在结构中添加了chardata标记

type Ad struct {
    XMLName xml.Name                `xml:"ad"`
    Remark string                   `xml:"remark,chardata"`
}
但是当我执行xml.Unmarshal操作时,我得到了注释字符串。只有它仍然包含字符串中的标记


是否有一种很好的方法(不是strings.Replace)删除这些标记?

您需要定义一个字段,该字段保存字符数据部分,而不包含标记中的封闭XML元素:

Remark string `xml:",chardata"`
您的代码可能需要如下所示:

type Ad struct {
    XMLName xml.Name `xml:"ad"`
    Remark struct {
        XMLName xml.Name `xml:"remark"`
        Value string `xml:",chardata"`
    }
}

func main() {
    in := "<ad><remark><![CDATA[some stuff]]></remark></ad>"
    var ad Ad
    xml.Unmarshal([]byte(in), &ad)
    fmt.Printf("remark: %s", ad.Remark.Value)
}
类型Ad结构{
XMLName xml.Name`xml:“ad”`
备注结构{
XMLName xml.Name`xml:“备注”`
值字符串`xml:,chardata“`
}
}
func main(){

在:="

当您删除chardata选项时会发生什么情况?我希望解析器在没有任何提示的情况下处理该选项。我得到了完全相同的结果。因此CDATA标记仍然在字符串中。您好,您能否发布一个完整的示例来演示该问题?感谢您的评论,我尝试了,但CDATA仍然在字符串中。您是否获得了CDATA字符串运行我的示例?我运行了它并验证了它不存在。如果您在代码库中工作时仍然存在问题,那么查看一个XML示例会很有趣。您可以将它添加到您的问题中吗?