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 ""