xmltodict未解析的解析不一样

时间:2018-12-12 13:25:39

标签: python xmltodict

import xmltodict

test_data = {'value1': 1, 'parent_lvl1': {'parent_Lvl2': {'value1': 2, 'value2': 3}}}
print("test_data : ", test_data)

xml_str = xmltodict.unparse({'settings' : test_data})
print("dict to xml string :", xml_str)

test_data_re = xmltodict.parse(xml_str, dict_constructor=dict)
print("xml_str back to dict : ", test_data_re['settings'])

结果是: test_data:{'parent_lvl1':{'parent_Lvl2':{'value2':3,'value1':2}},'value1':1} dict到xml字符串: 321 xml_str返回字典:{'parent_lvl1':{'parent_Lvl2':{'value2':'3','value1':'2'}},'value1':'1'}

结果是,当我在旧字典和新字典之间进行比较时,它们是不同的。我如何让xmltodict首先解析它解析的内容

1 个答案:

答案 0 :(得分:0)

我认为您不应该期望他们在总体上和所有时间都一样。

在自动解析过程中不会将整数值转换为整数,并且所有内容都将解析为字符串,但是您可以通过几种方法来控制类型转换。例如,您可以指定一个后处理器,并尝试将以value开头的键的值转换为整数:

def postprocessor(path, key, value):
    if key.startswith("value"):
        try:
            return key, int(value)
        except (ValueError, TypeError):
            return key, value
    return key, value


test_data_re = xmltodict.parse(xml_str, dict_constructor=dict, postprocessor=postprocessor)
print("xml_str back to dict : ", test_data_re['settings'])

这将产生:

xml_str back to dict :  {'value1': 1, 'parent_lvl1': {'parent_Lvl2': {'value1': 2, 'value2': 3}}}

顺便说一句,xmltodict tests是查找xmltodict示例用法的好地方,请查看。