我有以下XML “文件”:解析XML在Golang - 拆封
<pinnacle_line_feed>
<PinnacleFeedTime>1439954818555</PinnacleFeedTime>
<lastContest>34317132</lastContest>
<lastGame>218491030</lastGame>
<events>
<event>
<event_datetimeGMT>2015-08-21 09:50</event_datetimeGMT>
<gamenumber>483406220</gamenumber>
<sporttype>Aussie Rules</sporttype>
<league>AFL</league>
<IsLive>No</IsLive>
<participants>
<participant>
<participant_name>Hawthorn Hawks</participant_name>
<contestantnum>1251</contestantnum>
<rotnum>1251</rotnum>
<visiting_home_draw>Visiting</visiting_home_draw>
</participant>
<participant>
<participant_name>Port Adelaide Power</participant_name>
<contestantnum>1252</contestantnum>
<rotnum>1252</rotnum>
<visiting_home_draw>Home</visiting_home_draw>
</participant>
</participants>
<periods></periods>
</event>
</events>
</pinnacle_line_feed>
我试图用Golang解析这一点,已经写了下面迄今:
package main
import (
\t "fmt"
\t "encoding/xml"
)
type Participant struct {
\t XMLName xml.Name `xml:"participant"`
\t participant_name string `xml:"participant_name"`
\t contestantnum int `xml:"contestantnum"`
\t rotnum int `xml:"rotnum"`
\t visiting_home_draw string `xml:"visiting_home_draw"`
}
type Event struct {
\t XMLName xml.Name `xml:"event"`
\t event_datetimeGMT string `xml:"event_datetimeGMT"`
\t gamenumber string `xml:"gamenumber"`
\t sporttype string `xml:"sporttype"`
\t league string `xml:"league"`
\t IsLive string `xml:"IsLive"`
\t Participant []Participant `xml:"participant"`
}
type Events struct {
\t XMLName xml.Name `xml:"events"`
\t Event []Event `xml:"event"`
}
type Pinnacle_Line_Feed struct {
\t XMLName xml.Name `xml:"pinnacle_line_feed"`
\t PinnacleFeedTime string `xml:"PinnacleFeedTime"`
\t lastContest string `xml:"lastContest"`
\t lastGame string `xml:"lastGame"`
\t Events []Events `xml:"events"`
}
坦率地说,我研究了很多关于Golang的深层嵌套xml解析,并且我还没有发现很多可以帮助解决此代码的Unmarshal部分。理想情况下,代码将返回类似于Python字典的东西,比如,
{event_datetimeGMT:2015年8月21日,gamenumber:483406220,...,visiting_home_draw: “主页”}
我是新到Golang,所以如果你发现这个问题的话,请和我一起露面。
编辑:
基于尼古拉斯的评论下面,我增加了以下内容。这运行没有错误,但产生一个空的结果。
func main() {
pinny_xml := `
<pinnacle_line_feed>
<PinnacleFeedTime>1439954818555</PinnacleFeedTime>
<lastContest>34317132</lastContest>
<lastGame>218491030</lastGame>
<events>
<event>
<event_datetimeGMT>2015-08-21 09:50</event_datetimeGMT>
<gamenumber>483406220</gamenumber>
<sporttype>Aussie Rules</sporttype>
<league>AFL</league>
<IsLive>No</IsLive>
<participants>
<participant>
<participant_name>Hawthorn Hawks</participant_name>
<contestantnum>1251</contestantnum>
<rotnum>1251</rotnum>
<visiting_home_draw>Visiting</visiting_home_draw>
</participant>
<participant>
<participant_name>Port Adelaide Power</participant_name>
<contestantnum>1252</contestantnum>
<rotnum>1252</rotnum>
<visiting_home_draw>Home</visiting_home_draw>
</participant>
</participants>
<periods></periods>
</event>
</events>
</pinnacle_line_feed>
`
xmlReader := bytes.NewReader([]byte(pinny_xml))
yourPinnacleLineFeed := new(Pinnacle_Line_Feed)
if err := xml.NewDecoder(xmlReader).Decode(yourPinnacleLineFeed); err != nil {
return // or log.Panic(err.Error()) if in main
}
}
谢谢Nicolas!我根据你的回答编辑了我的评论,看起来这会毫无问题地运行,但结果只是空的。 – amachure
看起来我有点晚了,Jay Crumb是对的!大写首字母在你的结构中! –