Преобразование XML в словарь в Python

  1. Используйте модуль xmltodict для преобразования XML-строки в словарь на Python
  2. Используйте библиотеку 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ский словарь по значению
  • Сопутствующая статья - Python XML

  • Как проверить наличие ключа в словаре на Python языке
  • Как получить все файлы каталога
  • Как удалить файл и каталог на Python
  • Как сортировать Pythonский словарь по значению