[英]XML Unmarshal base64 string to struct in Golang
目前,我正在为Bar
实现自定义解组xml,它将将base64字符串解组到Bar
结构。
但是,当我运行此程序时,它就像无限递归解组我的自定义解组一样,是stackoverflow。
前往游乐场: https : //play.golang.org/p/QD4IdxhZr1Q
package main
import (
"bytes"
"encoding/base64"
"encoding/xml"
"fmt"
)
type Foo struct {
A Bar `xml:"a"`
}
type Bar struct {
B string `xml:"b"`
C string `xml:"c"`
D string `xml:"d"`
}
func main() {
var foo Foo
// Input
s := `<Foo><a>PGI+Yi10ZXN0PC9iPjxjPmMtdGVzdDwvYz48ZD5kLXRlc3Q8L2Q+Cg==</a></Foo>`
err := xml.Unmarshal([]byte(s), &foo)
if err != nil {
panic(err)
}
fmt.Println("Foo:", foo)
}
func (m *Bar) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
var s string
err := d.DecodeElement(&s, &start)
fmt.Println("Decode Element:", s)
if err != nil {
return err
}
data, err := base64.StdEncoding.DecodeString(s)
if err != nil {
return err
}
fmt.Println("Base64 Decoded string:", string(data))
var buf bytes.Buffer
buf.WriteString("<Bar>")
buf.WriteString(string(data))
buf.WriteString("</Bar>")
result := buf.String()
fmt.Println("After add root node:", result)
xml.Unmarshal([]byte(result), &m)
return nil
}
谢谢!
https://play.golang.org/p/yZVtiEbugWH
// define new type called BBar
// same with bar
type BBar Bar
xx := new(BBar)
// the BBar doesn't have UnmarshalXML method
xml.Unmarshal([]byte(result), xx)
*m = Bar(*xx)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.