首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xmltodict unparse不同

xmltodict unparse不同
EN

Stack Overflow用户
提问于 2018-12-12 21:25:39
回答 1查看 505关注 0票数 1
代码语言:javascript
复制
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 to xml string : 321 xml_str back to dict:{'parent_lvl1':{'parent_Lvl2':{'value2':'3','value1':'2'}},'value1':'1'}

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

EN

回答 1

Stack Overflow用户

发布于 2018-12-12 22:26:06

我认为你不应该期望它们在总体上和所有时间都是一样的。

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

代码语言:javascript
复制
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'])

这将产生:

代码语言:javascript
复制
xml_str back to dict :  {'value1': 1, 'parent_lvl1': {'parent_Lvl2': {'value1': 2, 'value2': 3}}}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53744074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档