我想解封innerXml及其属性。我编写了一个解组函数来实现这个功能,但是它看起来是在一个无限循环中。错误信息是
runtime: goroutine stack exceeds 1000000000-byte limit
fatal error: stack overflow例子是这里。
我不知道为什么会这样。有人能帮我吗谢谢。
Update1:谢谢Ainar.我试过他的例子。它的工作原理是将innerXml作为字符数据,而我并没有找到。如果我将示例更改为这,则结果为空,其中应包含所有原始xml。
Update2:我找到了一个解决方案,但可能有点冗长。代码。
发布于 2015-05-17 10:39:05
在您的UnmarshalXML方法中,您调用xml.(*Decoder).DecodeElement,而后者又调用UnmarshalXML等。这将创建无限循环。要么创建包装器结构,要么在UnmarshalXML中只对结构的一部分进行封送。
编辑:如果您想要解除封送节点的所有属性,请参阅这个答案中的示例。
工作实例:
func (in *innerXml) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
in.XMLName = start.Name
in.Attrs = make(map[string]string)
for _, attr := range start.Attr {
in.Attrs[attr.Name.Local] = attr.Value
}
err := d.DecodeElement(&in.Value, &start)
if err != nil {
return err
}
return nil
}操场:http://play.golang.org/p/TLcqFSyn94
https://stackoverflow.com/questions/30285759
复制相似问题