在 Python 中将 XML 转换为字典
Hemank Mehtani
2023年1月30日
2021年7月9日
XML 被称为可扩展标记语言。它用于存储和传输中小量数据,也广泛用于共享结构化信息。Python 使我们能够解析和修改 XML 文档。
在本教程中,我们将演示如何在 Python 中将 XML 字符串转换为字典。
在 Python 中使用 xmltodict
模块将 XML 字符串转换为字典
xmltodict
是 Python 中的一个模块,它使使用 XML 感觉像 JSON。由于 XML 的结构,可以使用此模块轻松将其转换为字典。
请参考下面的代码片段。
import xmltodict
xml_data = """
<student>
<id>DEL</id>
<name> Jack </name>
<email>jack@example.com</email>
<smeseter>8</smeseter>
<class>CSE</class>
<cgpa> 7.5</cgpa>
</student>
"""
d = xmltodict.parse(xml_data)
print(d)
输出:
OrderedDict([('student', OrderedDict([('id', 'DEL'), ('name', 'Jack'), ('email', 'jack@example.com'), ('smeseter', '8'), ('class', 'CSE'), ('cgpa', '7.5')]))])
在这里,我们可以看到结果是一个有序字典的形式。有序字典保留字典中键值对的顺序。parse()
函数在这里将 XML 数据解析为有序字典。
在 Python 中使用 cElemenTree
库将 XML 字符串转换为字典
cElementTree
是一个必不可少的 Python 库,允许我们解析和导航 XML 文档。使用 cElementTree
,我们可以将 XML 文档分解为易于使用的树结构。
我们将创建自己的函数来解析 XML 数据并将其转换为字典。我们将使用 collections
模块中的 deafultdict
类对象以我们想要的形式获得最终结果。
请参考以下代码。
from collections import defaultdict
from xml.etree import cElementTree as ET
def xml2dict(t):
d = {t.tag: {} if t.attrib else None}
children = list(t)
if children:
dd = defaultdict(list)
for dc in map(etree_to_dict, children):
for k, v in dc.items():
dd[k].append(v)
d = {t.tag: {k: v[0] if len(v) == 1 else v
for k, v in dd.items()}}
if t.attrib:
d[t.tag].update(('@' + k, v)
for k, v in t.attrib.items())
if t.text:
text = t.text.strip()
if children or t.attrib:
if text:
d[t.tag]['#text'] = text
else:
d[t.tag] = text
return d
xml_data = ET.XML("""
<student>
<id>DEL</id>
<name> Jack </name>
<email>jack@example.com</email>
<smeseter>8</smeseter>
<class>CSE</class>
<cgpa> 7.5</cgpa>
</student>
""")
d = xml2dict(xml_data)
print(d)
输出:
{'student': {'id': 'DEL', 'name': 'Jack', 'email': 'jack@example.com', 'smeseter': '8', 'class': 'CSE', 'cgpa': '7.5'}}
请注意,这是字典的树结构。请注意,最终字典通常是这两种方法中的嵌套字典。这是由于 XML 的结构造成的。
相关文章 - Python Dictionary
- 如何检查 Python 字典中是否存在某键
- 在 Python 中将字典转换为列表
- Python 如何得到文件夹下的所有文件
- 在 Python 字典中寻找最大值
- 如何按值对字典排序
- 如何在 Python 2 和 3 中合并两个字典