python 字典、实体对象转换xml

1.在使用dicttoxml转换XML时,字典一些空的list会过滤掉, 然后就自己写了一个转换方法

def dict_list_to_xml(self, k: str, object):
    data_xml = []
    try:
        data_dict = object
        # if isinstance(object, dict):
        #     data_dict = object

        for v in data_dict:  # 遍历字典排序后的key
            # k = "123"
            # v = data_dict.get(k)  # 取出字典中key对应的value
            if v.__class__.__name__ is not None:
                k = v.__class__.__name__
            if isinstance(v, list):
                val = Converter.dict_list_to_xml(self, k, v)
                data_xml.append('<{key}>{value}</{key}>'.format(key=k, value=val))
            elif isinstance(v, dict):
                val = Converter.dict_list_to_xml(self, k, v)
                data_xml.append('<{key}>{value}</{key}>'.format(key=k, value=val))
            elif isinstance(v, str):
                data_xml.append('<{key}>{value}</{key}>'.format(key=k, value=v))
            else:
                data_vv_xml = []
                v_dict = v.__dict__
                for kk in v_dict.keys():
                    vv = v_dict.get(kk)
                    if vv is None:
                        vv = ""
                    if isinstance(vv, list):
                        val = Converter.dict_list_to_xml(self, kk, vv)
                        data_vv_xml.append('<{key}>{value}</{key}>'.format(key=kk, value=val))
                    else:
                        data_vv_xml.append('<{key}>{value}</{key}>'.format(key=kk, value=vv))
                vv_str = '{}'.format(''.join(data_vv_xml))
                data_xml.append('<{key}>{value}</{key}>'.format(key=k, value=vv_str))

        return '{}'.format(''.join(data_xml))  # 返回XML
    except:
        return ""

def trans_dict_to_xml(self, object, first_node_name: str = "xml"):
    """
    实体对象转换XML
    :param object: 实体对象
    :param first_node_name: 首节点名称
    :return:
    """
    try:
        data_dict = object.__dict__
        data_xml = []
        for k in sorted(data_dict.keys()):  # 遍历字典排序后的key
            v = data_dict.get(k)  # 取出字典中key对应的value
            if v is None:
                v = ""
            if isinstance(v, list):
                val = Converter.dict_list_to_xml(self, k, v)
                data_xml.append('<{key}>{value}</{key}>'.format(key=k, value=val))
            elif isinstance(v, dict):
                val = Converter.dict_list_to_xml(self, k, v)
                data_xml.append('<{key}>{value}</{key}>'.format(key=k, value=val))
            elif v is None or isinstance(v, str) or isinstance(v, int):
                data_xml.append('<{key}>{value}</{key}>'.format(key=k, value=v))
            else:
                try:
                    data_vv_xml = []
                    v_dict = v.__dict__
                    for kk in v_dict.keys():
                        vv = v_dict.get(k)
                        if vv is None:
                            vv = ""
                        if isinstance(vv, list):
                            val = Converter.dict_list_to_xml(self, kk, vv)
                            data_vv_xml.append('<{key}>{value}</{key}>'.format(key=kk, value=val))
                        else:
                            data_vv_xml.append('<{key}>{value}</{key}>'.format(key=kk, value=vv))
                    vv_str = '{}'.format(''.join(data_vv_xml))
                    data_xml.append('<{key}>{value}</{key}>'.format(key=k, value=vv_str))
                except:
                    data_xml.append('<{key}>{value}</{key}>'.format(key=k, value=v))

            # if k == 'detail' and not v.startswith('<![CDATA['):  # 添加XML标记
            #     v = '<![CDATA[{}]]>'.format(v)
            # data_xml.append('<{key}>{value}</{key}>'.format(key=k, value=v))
        xml_str = '<' + first_node_name + '>{}</' + first_node_name + '>'
        return xml_str.format(''.join(data_xml))  # 返回XML
    except:
        return ""

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值