我有一个扁平的XML结构,我想将其解组到一个嵌入了一个部分的结构中。这可能吗?我可以编写什么语法或自定义方法?
在这个例子中,我用一个猜测标记了嵌套的结构:xml:""
,它被“encoding / xml”跳过。
type FloatHolder struct {
Value float32 `xml:"value"`
}
type pv struct {
XMLName xml.Name `xml:"series"`
Test1 FloatHolder `xml:""` // does not populate :-(
Test2 FloatHolder `xml:"nested"` // populates
}
func main() {
contents := `<series>
<nested>
<value>1234</value>
</nested>
<value>1234</value>
</series>`
m := &pv{}
err := xml.Unmarshal([]byte(contents), &m)
if err != nil {
panic(err)
}
fmt.Printf("%f %f\n", m.Test1.Value, m.Test2.Value)
}
输出:“0.000000 1234.000000”
游乐场:https://play.golang.org/p/aEdDLFYqL5
谢谢!
答案 0 :(得分:1)
编辑:评论互动后。
是的,你可以。让我们说
XML:
<series>
<value>123456</value>
</series>
结构定义:
type FloatHolder struct {
Value float32 `xml:",chardata"`
}
type pv struct {
XMLName xml.Name `xml:"series"`
Test2 FloatHolder `xml:"value"`
}
Go Playground链接:https://play.golang.org/p/9sWQaw0HlS
实际上,根据您的XML,它不是嵌套字段。它属于series
元素。
将您的结构更新为以下内容:
type pv struct {
XMLName xml.Name `xml:"series"`
Test1 float32 `xml:"value"`
Test2 FloatHolder `xml:"nested"`
}
Go Playground Link:https://play.golang.org/p/-mWrUMJXxX