Thursday, 20 August 2015

XML : Parsing XML in Golang - Unmarshaling

I have the following xml "file":

  <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>  

I am attempting to parse this with Golang, and have written the below thus far:

   package main     import (           "fmt"           "encoding/xml"   )      type Participant struct {          XMLName xml.Name `xml:"participant"`          participant_name string `xml:"participant_name"`          contestantnum int `xml:"contestantnum"`          rotnum int `xml:"rotnum"`          visiting_home_draw string `xml:"visiting_home_draw"`  }     type Event struct {          XMLName xml.Name `xml:"event"`          event_datetimeGMT string `xml:"event_datetimeGMT"`          gamenumber string `xml:"gamenumber"`          sporttype string `xml:"sporttype"`          league string `xml:"league"`          IsLive string `xml:"IsLive"`          Participant []Participant `xml:"participant"`   }      type Events struct {          XMLName xml.Name `xml:"events"`          Event []Event `xml:"event"`   }     type Pinnacle_Line_Feed struct {          XMLName xml.Name `xml:"pinnacle_line_feed"`          PinnacleFeedTime string `xml:"PinnacleFeedTime"`          lastContest string `xml:"lastContest"`          lastGame string `xml:"lastGame"`          Events []Events `xml:"events"`   }  

Frankly, I have researched quite a bit on deep nested xml parsing in Golang, and I haven't found much to help with the Unmarshal portion of this code. Ideally, the code would return something similar to a python dictionary, such as,

{event_datetimeGMT: 2015-08-21, gamenumber: 483406220, ... , visiting_home_draw: "Home"}

I am new to Golang, so please bare with me if you find this question off-base.

No comments:

Post a Comment