我有一个XML结构,基本上包含一个节点数组,这些节点应该反序列化为一个简单的go结构的一部分,但它不起作用。这是我正在使用的代码(评论显示我的期望):
package main
import "fmt"
import "encoding/xml"
func main() {
c := Conversation{}
xml.Unmarshal(raw, &c)
fmt.Println(len(c.Dialog)) // expecting 2, not 0
fmt.Println(c.Dialog[0].Text) // expecting "Hi", not a panic
}
var raw = []byte(`<conversation>
<message>
<text>Hi</text>
</message>
<message>
<text>Bye</text>
</message>
</conversation>`)
type Conversation struct {
Dialog []Message `xml:"conversation"`
}
type Message struct {
XMLName xml.Name `xml:"message"`
Text string `xml:"text"`
}
为什么这不起作用?
答案 0 :(得分:4)
问题是Conversation.Dialog
的结构字段标记是错误的。标签应该说"message"
,而不是"conversation"
:
type Conversation struct {
Dialog []Message `xml: "message"`
}