我想解组innerXml及其属性。我编写了一个Unmarshal函数来实现它,但看起来函数处于无限循环中。错误信息是
runtime: goroutine stack exceeds 1000000000-byte limit
fatal error: stack overflow
示例是here。
我不知道为什么会这样。有人可以帮助我,谢谢。
Update1:谢谢Ainar-G。我试过他的榜样。它的作用是将innerXml作为chardata获取,我找不到。如果我将示例更改为this,结果为空,则应包含所有原始xml。
Update2:我找到了解决方案,但可能有点罗嗦。 code
答案 0 :(得分:2)
在UnmarshalXML
方法中,您调用xml.(*Decoder).DecodeElement
,然后调用UnmarshalXML
等。这会创建无限循环。要么创建一个包装器结构,要么只在UnmarshalXML
中解组结构的一部分。
编辑:如果要解组节点的所有属性,请参阅this answer中的示例。
工作示例:
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
}