Преобразование XML в словарь в Python
-
Используйте модуль
xmltodict
для преобразования XML-строки в словарь на Python -
Используйте библиотеку
cElemenTree
для преобразования XML-строки в словарь на Python

XML известен как расширяемый язык разметки. Он используется для хранения и передачи небольших и средних объемов данных, а также широко используется для обмена структурированной информацией. Python позволяет нам анализировать и изменять XML-документы.
В этом руководстве мы продемонстрируем, как преобразовать строку XML в словарь на Python.
Используйте модуль xmltodict
для преобразования XML-строки в словарь на Python
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-данные в упорядоченном словаре.
Используйте библиотеку cElemenTree
для преобразования XML-строки в словарь на Python
cElementTree - важная библиотека Python, позволяющая анализировать XML-документ и перемещаться по нему. С помощью cElementTree
мы можем разбить XML-документ на древовидную структуру, с которой легко работать.
Мы создадим нашу собственную функцию для анализа XML-данных и преобразования их в словарь. Мы воспользуемся объектом класса deafultdict
из модуля collections
, чтобы получить конечный результат в желаемой форме.
См. Следующий код.
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 2 и 3
- Как удалить элемент из словаря Pythonа
- Как получить ключи от словаря в виде списка на Python