2014-01-14 54 views
0

我有一個XML結構,它基本上包含一個節點數組,它應該反序列化爲一個簡單的go結構的片段,但它不起作用。這裏是我正在使用的代碼(評論顯示我期望的):Go - 如何將XML解壓縮到容器結構中,使用片段

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"` 
} 

爲什麼不能正常工作?

遊樂場:http://play.golang.org/p/a_d-nhcfoP

回答

4

的問題是,對於Conversation.Dialog你的結構域變量是錯誤的。標籤應該說"message",不"conversation"

type Conversation struct { 
    Dialog []Message `xml: "message"` 
} 

http://play.golang.org/p/5VPUcHRLbe

+1

疑難雜症!謝謝。它看起來像我不需要消息結構上的XMLName字段:http://play.golang.org/p/dSULYVIZi8 – mdwhatcott

+0

哦,呵呵。這很酷。 – joshlf