python - xmltodict unparse 解析不一样
问题描述
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 解析它首先解析的内容
解决方案
我认为您不应该期望它们在总体上和所有时间都相同。
整数值在解析过程中不会自动转换为整数,所有内容都被解析为字符串,但您有几种方法可以控制类型转换。例如,您可以指定一个后处理器并尝试将值转换为以 开头的键的整数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
示例用法的好地方是xmltodict
测试,检查一下。
推荐阅读
- python - 在 Mac OSX 中,Weka 无法识别 Python(Possible Python Conflict)
- c - 代码在 C 中给了我不正确的结果
- java - 如何更新 JFreeChart 条形图中的数据集
- azure - 使用 WebJobs 在 Azure Blob 上写入过多磁盘
- typescript - 为什么以下代码在 TypeScript 中给我一个声明错误?
- bash - Git应用二进制文件差异。“补丁不适用”错误
- css - *not* 聚焦时移除 JavaFX ScrollPane 滚动条周围的边框
- matlab - 基于特定变量重新采样数据
- angular-material - 访问预建方案的原色
- c - 错误杂散\ 327 C代码未编译