Python で XML を辞書に変換する

Hemank Mehtani 2023年1月30日
  1. Python で xmltodict モジュールを使用して XML 文字列を辞書に変換する
  2. Python で cElemenTree ライブラリを使用して XML 文字列を辞書に変換する
Python で XML を辞書に変換する

XML は ExtensibleMarkupLanguage として知られています。少量から中量のデータを保存および転送するために使用され、構造化された情報を共有するためにも広く使用されています。Python を使用すると、XML ドキュメントを解析および変更できます。

このチュートリアルでは、Python で XML 文字列を辞書に変換する方法を示します。

Python で xmltodict モジュールを使用して XML 文字列を辞書に変換する

xmltodict は、XML の操作を JSON のように感じさせる Python のモジュールです。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 は、XML ドキュメントの解析とナビゲートを可能にする必須の Python ライブラリです。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