首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >innerXml及其属性

innerXml及其属性
EN

Stack Overflow用户
提问于 2015-05-17 10:14:12
回答 1查看 773关注 0票数 2

我想解封innerXml及其属性。我编写了一个解组函数来实现这个功能,但是它看起来是在一个无限循环中。错误信息是

代码语言:javascript
复制
runtime: goroutine stack exceeds 1000000000-byte limit 
fatal error: stack overflow

例子是这里

我不知道为什么会这样。有人能帮我吗谢谢。

Update1:谢谢Ainar.我试过他的例子。它的工作原理是将innerXml作为字符数据,而我并没有找到。如果我将示例更改为,则结果为空,其中应包含所有原始xml。

Update2:我找到了一个解决方案,但可能有点冗长。代码

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-17 10:39:05

在您的UnmarshalXML方法中,您调用xml.(*Decoder).DecodeElement,而后者又调用UnmarshalXML等。这将创建无限循环。要么创建包装器结构,要么在UnmarshalXML中只对结构的一部分进行封送。

编辑:如果您想要解除封送节点的所有属性,请参阅这个答案中的示例。

工作实例:

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30285759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档