Python で XML を辞書に変換する
Hemank Mehtani
2023年1月30日
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 で辞書をリストに変換する
- Python でディレクトリのすべてのファイルを取得する方法
- Python 辞書で最大値を求める
- Python 辞書を値でソートする方法
- Python 2 および 3 で 2つの辞書をマージする方法
- Python 辞書から要素を削除する方法