在 Python 中將 XML 轉換為字典

Hemank Mehtani 2023年1月30日 2021年7月9日
  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