Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GO中的XML解组_Xml_Go - Fatal编程技术网

GO中的XML解组

GO中的XML解组,xml,go,Xml,Go,我有以下XML <a> <client client_id="6881937" clt_code="0" clt_date="" sms_block="N" active_serv="N" phone="77777645521" threshold_amount="1" clt_charge="" clt_charge_id="" > </client> <card> <a card_num="KZ5392

我有以下XML

<a>
    <client client_id="6881937" clt_code="0" clt_date="" sms_block="N" active_serv="N" phone="77777645521" threshold_amount="1" clt_charge="" clt_charge_id="" > </client> 
    <card> 
        <a card_num="KZ5392...6449" card_id="66783573" crd_code="0" crd_date="" />
        <a card_num="552204...9124" card_id="66783574" crd_code="0" crd_date="" />
        <a card_num="KZ7392...4128" card_id="14335135" crd_code="0" crd_date="" />
        <a card_num="440564...7683" card_id="14335136" crd_code="0" crd_date="" />
     </card>
</a>
XML解析器检测标记的真实数量,例如“卡”中的“a”。但它不会检测这些属性的值。以下是xml.Unmarshal之后的Printf输出:

 v = &models.OwCheckClient{XMLName:xml.Name{Space:"", Local:"a"}, Client:models.client{client_id:"", clt_code:"", sms_block:"", active_serv:"", phone:"", threshold_amount:"", clt_charge:"", clt_charge_id:""}, Cards:models.cards{Card:[]models.card{models.card{card_num:"", card_id:"", crd_code:""}, models.card{card_num:"", card_id:"", crd_code:""}, models.card{card_num:"", card_id:"", crd_code:""}, models.card{card_num:"", card_id:"", crd_code:""}}}}

怎么了

客户机和卡结构中的字段是私有的(具有小写名称),因此XML解组器无法写入这些字段。将名称更改为以大写字母开头,它们将起作用

同样,不相关,但您不需要
struct来加深一个标记。如果在那一层你不需要其他东西,你可以

Cards []card `xml:"card>a"`

进入您的
OwCheckClient
struct并删除
cards
struct,它将正确反序列化。

客户机
card
结构中的字段是私有的(具有小写名称),因此XML解组器无法写入它们。将名称更改为以大写字母开头,它们将起作用

同样,不相关,但您不需要
struct来加深一个标记。如果在那一层你不需要其他东西,你可以

Cards []card `xml:"card>a"`

进入您的
OwCheckClient
struct并删除
cards
struct,它将正确反序列化。

thks,它解决了问题!thks,它解决了问题!