1 回答
TA贡献1796条经验 获得超4个赞
对于初学者,您没有正确使用属性 struct 标签,所以这是一个简单的解决方法。
如果 XML 元素具有先前规则未处理的属性,并且结构具有包含“,any,attr”的关联标记的字段,则 Unmarshal 会在第一个此类字段中记录属性值。
其次,因为标记xml:",chardata"
甚至不通过接口传递该字段UnmarshalXML
,xml.Unmarshaller
所以您不能简单地为它创建一个新类型Text
并为它实现该接口,如同一文档中所述。(注意除 []byte 或 string 以外的任何类型都会强制报错)
如果 XML 元素包含字符数据,则该数据将累积在具有标记“,chardata”的第一个结构字段中。struct 字段的类型可以是 []byte 或 string。如果没有这样的字段,字符数据将被丢弃。
因此,处理不需要的字符的最简单方法是在事后替换它们。
var Replacer = strings.NewReplacer("
","","	","","\n","","\t","")
func recursiveReplace(n *Node) {
n.Text = Replacer.Replace(n.Text)
for i := range n.Children {
recursiveReplace(&n.Children[i])
}
}
理论上可以实现xml.Unmarshaller的接口Node,但是您不仅要处理手动 xml 解析,还要处理它是递归结构这一事实。事后删除不需要的字符是最简单的。
- 1 回答
- 0 关注
- 103 浏览
添加回答
举报