2016-04-24 2 views
0

У меня возникли проблемы с анализом xml в Go. Может ли кто-нибудь помочь? Формат XML является:GOlang XML-синтаксический анализ/unmarshal

<Feed version='1.03' format='FULL' date='2016-04-22T18:31:01.4988282+01:00'> 

    <Ids> 
      <Id code='000001' quantity='4' /> 
      <Id code='000002' quantity='0' /> 
    </Ids> 

</Feed> 
+0

Что вы хотите от него разобрать? Что вы пробовали? Где вы застряли? Ознакомьтесь с пакетом ['encoding/xml'] (https://golang.org/pkg/encoding/xml/), чтобы начать работу. – icza

+0

У меня только что удалось разобраться. Мне не хватало «attr», чтобы получить атрибуты Id. – osmo

ответ

1

Для тех, кто интересно, вот пример, который туда и обратно упомянутый XML для перехода структур и обратно:

func TestXml(t *testing.T) { 
    type Id struct { 
     Code string `xml:"code,attr"` 
     Quantity int `xml:"quantity,attr"` 
    } 

    type Feed struct { 
     Version string `xml:"version,attr"` 
     Format string `xml:"format,attr"` 
     Date string `xml:"date,attr"` 
     Ids []Id `xml:"Ids>Id"` 
    } 

    x := []byte(` 
     <Feed version='1.03' format='FULL' date='2016-04-22T18:31:01.4988282+01:00'> 
      <Ids> 
       <Id code='000001' quantity='4' /> 
       <Id code='000002' quantity='0' /> 
      </Ids> 
     </Feed> 
    `) 

    f := Feed{} 
    xml.Unmarshal(x, &f) 
    t.Logf("%#v", f) 
    t.Log("Code 0:", f.Ids[0].Code) 

    b, _ := xml.Marshal(f) 
    t.Log(string(b)) 
} 

Это производит следующий вывод:

xml_test.go:42: domain.Feed{Version:"1.03", Format:"FULL", Date:"2016-04-22T18:31:01.4988282+01:00", Ids:[]domain.Id{domain.Id{Code:"000001", Quantity:4}, domain.Id{Code:"000002", Quantity:0}}} 
xml_test.go:43: Code 0: 000001 
xml_test.go:46: <Feed version="1.03" format="FULL" date="2016-04-22T18:31:01.4988282+01:00"><Ids><Id code="000001" quantity="4"></Id><Id code="000002" quantity="0"></Id></Ids></Feed> 

В документации для xml содержатся прекрасные примеры.

+0

отлично! Спасибо за вашу помощь – osmo