python - 带有 force_list 参数的 xmltodict 为空 XML 列表返回一个带有 None 元素的列表
问题描述
我正在解析 XMLxmltodict
以force_list=('xml_tag')
获取 XML 列表中单个元素的列表。它有效!但是,如果xml_tag
没有孩子,它会返回一个[None]
(带有单个None
对象的列表)。如何预防?
XML
<Something>
<Guitar>
<name>Walden</name>
<strings>5</strings>
</Guitar>
<Pokemons>
</Pokemons>
</Something>
PYTHON
res = xmltodict.parse(xml, force_list=('Pokemons',))
res = res['Something']['Guitar']['Pokemons']
pprint(res)
>>> [None]
有什么建议么?
[更新]
对不起,我没有澄清我想要什么。我想得到空列表,因为结果不是带有 None 元素的列表
解决方案
您可以将后处理函数传递给 xmltodict,它允许您修改 dict 值。
但是后处理需要返回一个键和一个值:
import xmltodict
import json
def postprocessor(path, key, value):
if key == 'Pokemons' and not value:
return key, []
return key, value
xml = """<Something>
<Guitar>
<name>Walden</name>
<strings>5</strings>
</Guitar>
<Pokemons>
</Pokemons>
</Something>"""
res = xmltodict.parse(xml, postprocessor=postprocessor)
print(json.dumps(res, indent=2, sort_keys=True))
输出:
{
"Something": {
"Guitar": {
"name": "Walden",
"strings": "5"
},
"Pokemons": []
}
}
推荐阅读
- javascript - 正则表达式:在正则表达式中查找一个组与第二组和边界的多次出现
- linux - 一旦 DPDK 应用程序停止,就无法修改大页面大小
- sql - 为每个用户选择最长的字符串
- ios - 如何使用 FileManger 和 JSONEncoder 将 JSON 写入本地文件?迅速
- hashmap - Java 11 字符串数组到数组位置的映射,字符串
- python - 在基类中使用派生类的属性
- php - Laravel:看不到'radio'以外的变量值
- java - Google App Engine 异常 - 当前线程未与任何请求关联且不是后台线程
- flutter - 在颤动中公开所有 RevenueCat PurchasesErrorCode 代码
- jenkins-plugins - 如何在 jenkins kubernetes 插件上配置权限以访问远程 GKE 集群