【问题标题】:How to iteratively transform a lxml.objectify.ObjectifiedElement from authorize.net into a python dict如何迭代地将 lxml.objectify.ObjectifiedElement 从 authorize.net 转换为 python dict
【发布时间】:2018-03-22 16:23:26
【问题描述】:

我正在尝试对来自 authorize.net 的数据执行交易报告。

我已经确定返回的对象是lxml.objectify.ObjectifiedElement,并且很难按原样使用。

我希望将此对象转换为更可行的dict 对象,但在这样做时遇到了麻烦。

我已确定 authorize.net 事务如下所示:

<getTransactionDetailsRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
<messages>
    <resultCode>...</resultCode>
    <message>
        <code>...</code>
        <text>...</text>
    </message>
</messages>
<transaction>
    <transId>...</transId>
    <submitTimeUTC>...</submitTimeUTC>
    <submitTimeLocal>...</submitTimeLocal>
    <transactionType>...</transactionType>
    <transactionStatus>...</transactionStatus>
    <responseCode>...</responseCode>
    <responseReasonCode>...</responseReasonCode>
    <responseReasonDescription>...</responseReasonDescription>
    <AVSResponse>...</AVSResponse>
    <cardCodeResponse>...</cardCodeResponse>
    <batch>
        <batchId>...</batchId>
        <settlementTimeUTC>...</settlementTimeUTC>
        <settlementTimeLocal>...</settlementTimeLocal>
        <settlementState>...</settlementState>
    </batch>
    <order>
        <description>...</description>
    </order>
    <authAmount>...</authAmount>
    <settleAmount>...</settleAmount>
    <lineItems>
        <lineItem>
            <itemId>...</itemId>
            <name>...</name>
            <description>...</description>
            <quantity>...</quantity>
            <unitPrice>...</unitPrice>
            <taxable>...</taxable>
        </lineItem>
    </lineItems>
    <taxExempt>...</taxExempt>
    <payment>
        <creditCard>
            <cardNumber>...</cardNumber>
            <expirationDate>...</expirationDate>
            <cardType>...</cardType>
        </creditCard>
    </payment>
    <customer>
        <email>...</email>
    </customer>
    <billTo>
        <firstName>...</firstName>
        <lastName>...</lastName>
        <phoneNumber>...</phoneNumber>
    </billTo>
    <recurringBilling>...</recurringBilling>
    <product>...</product>
    <marketType>...</marketType>
</transaction>

我找到了 this documentationthis tutorial 作为 lxml 对象的帮助。

我想生成一个看起来像

的字典
{getTransactionDetailsRequest : 
    {messages : 
        {code : ...},
        {text : ...}
    },
    {transaction : 
        {transId : ...},
        ...
    }
}

【问题讨论】:

    标签: python python-3.x lxml authorize.net


    【解决方案1】:

    我想出了一个办法:

    import re 
    def to_dict(element):
        ret = {}
        if element.getchildren() == []:
            return element.text
        else:
            for elem in element.getchildren():
                subdict = to_dict(elem)
                ret[re.sub('{.*}', '', elem.tag)] = subdict
        return ret
    

    这会返回预期的字典。

    希望这可以在将来对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 2019-10-08
      • 2013-06-15
      • 2011-08-08
      • 1970-01-01
      相关资源
      最近更新 更多