我有这个xml文件,我似乎无法将任何数据解组到结构中。有人可以帮帮我。它只是我以前从未使用过xml,总是在xml之前首选json。刚用我的代码编辑了这篇文章,它仍然给我空的结构值
<Envelope>
<Data>
<Order>
<DeliveryData>
<del_country>BELGIQUE/BELGIE</del_country>
<del_country_code>BE</del_country_code>
<del_company>False</del_company>
<del_name>ADAM</del_name>
<del_contact></del_contact>
<del_firstName></del_firstName>
<del_addressLine1>Durasweg 33</del_addressLine1>
<del_addressLine2></del_addressLine2>
<del_areaCode>1000</del_areaCode>
<del_city>BRUXELLES</del_city>
<del_country>BE</del_country>
<del_language>FR</del_language>
<del_modeCode>71</del_modeCode>
<phone1>0032872180808</phone1>
<email></email>
<inv_third>438802</inv_third>
<OrderID>15787978</OrderID>
<ParcelID>NE1578797801</ParcelID>
<OrderDate>16/09/2014 14:22:54</OrderDate>
<Shipping_date>16/09/2014 14:26:55</Shipping_date>
</DeliveryData>
</Order>
</Data>
type DeliveryData struct {
XMLName xml.Name `xml:"DeliveryData"`
Country string `xml:"del_country"`
}
type Envelope struct {
XMLName xml.Name `xml:"Envelope"`
Data Data `xml:"Data"`
}
type Data struct {
XMLName xml.Name `xml:Data`
Orders []Order `xml:Order`
}
type Order struct {
XMLName xml.Name `xml:"Order"`
DeliveryData DeliveryData `xml:"DeliveryData"`
}
答案 0 :(得分:3)
有两个原因:
</Envelope>
。 Data
中的结构标记格式错误 - 它们不引用属性的名称 - 这意味着XML反序列化器会查找“订单”字段,而不是Orders
字段。 为了更好的衡量标准:您可以在http://play.golang.org/p/6-odOcSOnF
上找到一个完整的示例相关部分是我的
type Data struct {
XMLName xml.Name `xml:"Data"`
Orders []Order `xml:"Order"`
}
与原始
相比type Data struct {
XMLName xml.Name `xml:Data`
Orders []Order `xml:Order`
}
答案 1 :(得分:0)
添加到@ publysher的答案,你实际上不需要有这么多的结构,你只需要2:
type Data struct {
XMLName xml.Name `xml:"Envelope"`
Data []Fields `xml:"Data>Order>DeliveryData"`
}
type Fields struct {
Country string `xml:"del_country"`
OrderID uint64
}
然后你可以解组你的xml(当你修复它当然像@publysher指出的那样):
var data Data
err := xml.Unmarshal([]byte(serialized), &data)
if err != nil {
fmt.Println(err)
return
}