将xml解组到结构中

将xml解组到结构中,xml,go,Xml,Go,我有这个xml文件,似乎我无法将任何数据解压到结构中。有人可以帮我。只是我以前从未使用过xml,总是在使用xml之前首选json。刚刚用我的代码编辑了这篇文章,它仍然给我空的结构值 <Envelope> <Data> <Order> <DeliveryData> <del_country>BELGIQUE/BELGIE</del_country>

我有这个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>
原因有两个:

您的XML格式不正确-您应该添加一个结束符。 数据中的结构标记格式不正确-它们没有引用属性的名称-这意味着XML反序列化程序查找的是“Order”字段,而不是Orders字段。 为了更好的衡量:您可以找到一个关于

相关部分是我的

type Data struct {
    XMLName xml.Name `xml:"Data"`
    Orders  []Order  `xml:"Order"`
}
对你的原创

type Data struct {
    XMLName xml.Name `xml:Data`
    Orders  []Order  `xml:Order`
}

除了@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
}

您的XML无效-您正在使用而不是关闭。这是在原始代码中还是仅以您粘贴到此处的方式?另外,请粘贴尝试反序列化XML的代码,可能其中存在一些小错误。这是正确的答案,我的只是额外的信息。但是在解组后,如何向结构添加新的顺序?你能举个例子吗?
var data Data
err := xml.Unmarshal([]byte(serialized), &data)
if err != nil {
    fmt.Println(err)
    return
}