在 Python 中将 XML 转换为字典

Hemank Mehtani 2023年1月30日
  1. 在 Python 中使用 xmltodict 模块将 XML 字符串转换为字典
  2. 在 Python 中使用 cElemenTree 库将 XML 字符串转换为字典
在 Python 中将 XML 转换为字典

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 XML