gpt4 book ai didi

go - xml Unmarshal innerXml 及其属性

转载 作者:IT王子 更新时间:2023-10-29 01:42:42 27 4
gpt4 key购买 nike

我想解码 innerXml 及其属性。我编写了一个 Unmarshal 函数来实现它,但看起来该函数处于无限循环中。错误信息为

runtime: goroutine stack exceeds 1000000000-byte limit 
fatal error: stack overflow

例子是here .

我不知道为什么会这样。谁能帮帮我,谢谢。

更新 1:感谢 Ainar-G。我试过他的例子。它的工作原理是将 innerXml 作为我没有找到的 chardata。如果我将示例更改为 this ,结果为空,它应该包括 .

中的所有原始 xml

Update2:我找到了一个解决方案,但可能有点罗嗦。 code .

最佳答案

在您的 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
}

Playground :http://play.golang.org/p/TLcqFSyn94

关于go - xml Unmarshal innerXml 及其属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30285759/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com