GO 中的 XML 解码

标签 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...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>

现在,我会将它解码到 golang 结构中,例如:

type OwCheckClient struct {
    XMLName xml.Name `xml:"a"`
    Client client `xml:"client"`
    Cards cards `xml:"card"`
}

type client struct {
    client_id string  `xml:"client_id,attr"`
    clt_code string `xml:"clt_code,attr"`
    sms_block string `xml:"sms_block,attr"`
    active_serv string `xml:"active_serv,attr"`
    phone string `xml:"phone,attr"`
    threshold_amount string `xml:"threshold_amount,attr"`
    clt_charge string `xml:"clt_charge,attr"`
    clt_charge_id string `xml:"clt_charge_id,attr"`
}

type cards struct {
    Card []card `xml:"a"`
}

type card struct {
    card_num string `xml:"card_num,attr"`
    card_id string `xml:"card_id,attr"`
    crd_code string `xml:"crd_code,attr"`
}

XML 解析器检测标签的真实数量,例如,“card”中的“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:""}}}}

怎么了?

最佳答案

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

此外,无关紧要,但您不需要 cards 结构来获得更深的标签。如果在那一层你不需要别的东西,你可以放

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

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

关于GO 中的 XML 解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49686061/

相关文章:

c# - 如何将模式包含在 xml 中

XML 文件中的 Java 替换

php - 编码、序列化和编码

bash - 如何执行shell命令

XML 编码 : mix attributes and elements

android - 在此行 : - The markup in the document following the root element must be well- formed 找到多个注释

sql - 循环通过 xml 然后更新 SQL 中的 xml 变量

html - XPath 中的逻辑与

go - 如何使用追加或不追加将更多数据添加到结构中?

go - 部分使用命名结果参数来设置默认值