Запись данных в xml
Есть список словарей вида:
[, . ]
Мне нужно этот список записать в xml формат вида:
Ivan Ivanov Moscow . .
Как это реализовать, используя стандартные библиотеки python?
Вот мой код:
import xml.etree.ElementTree as ET root = ET.Element('root') person = ET.SubElement(root,'person') a=[] # тот список for key in a: ET.SubElement(person,'first_name').text = key['first_name'] ET.SubElement(person,'last_name').text = key['last_name'] ET.SubElement(person,'city').text = key['city'] tree = ET.ElementTree(root) tree.write('xmlf.xml')
Но этот цикл неправильный, выход такой:
Ivan Ivanov Moscow Sergey Sidorov Sochi .
Как его исправить?
Отслеживать
Hutado Hutado
задан 30 июл 2018 в 6:40
Hutado Hutado Hutado Hutado
429 4 4 серебряных знака 16 16 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Исправил код в вопросе:
import xml.etree.ElementTree as ET items = [ , , ] root = ET.Element('root') for i, item in enumerate(items, 1): person = ET.SubElement(root, 'person' + str(i)) ET.SubElement(person, 'first_name').text = item['first_name'] ET.SubElement(person, 'last_name').text = item['last_name'] ET.SubElement(person, 'city').text = item['city'] tree = ET.ElementTree(root) tree.write('xmlf.xml')
Результат (с добавлением отступов):
Ivan Ivanov Moscow Sergey Sidorov Sochi
Как я учился работать с XML
Работая с xml в питоне многие пользуются довольно удобным встроенным модулем xml.dom.minidom. Вся информация в нем, включая содержимое тегов, представляется как эдакие ноды, работа с которыми ведется напрямую. Вот кусок кода обработки xml-файла:
- app_xml = xmlp.parse( «base.xml» )
- id = app_xml.createElement(att)
- node = app_xml.createTextNode(«simple.App»)
- id.appendChild(node)
- root.appendChild(id)
- res = open( «base.xml» , «w» )
- res.writelines(app_xml.toprettyxml())
- res.close()
Весь этот код, как несложно догадаться, открывает существующий xml-файл, парсит и добавляет к нему один-единственный тег id со строкой «simple.App». Громоздко? Да не то слово. Мало того, обнаружился еще один неприятный баг — со времен Python 2.4 функция toprettyxml(), предназначенная для выдачи содержимого ноды или дерева нод в текстовом виде, зачем-то добавляет к каждой строчке символ перевода каретки, в результате чего вместо
На первый взгляд, это не критично, поскольку значение остается нетронутым, однако в некоторых случаях и для некоторых парсеров (если, например, собираетесь использовать сгенеренный XML в других разработках) — при обработке числовых данных будет выводиться ошибка. В частности, этим грешит сборщик Adobe AIR-приложений, биндинги к которому я, собственно, и писал.
Поиски в интернете дали результат. Получалось, что либо я должен использовать в своем коде хак в виде лишней функции строчек эдак на двадцать, либо использовать стандартный toxml(), который хоть и генерит валидные файлы — но всю инфу в них располагает в одну строчку, то есть весь мой дескриптор превратился в кашу вида
Назовите меня эстетом, но при больших объемах файла (да еще и с комментариями) искать в подобной куче ошибочные значения — то еще удовольствие.
И тогда я стал искать альтернативный вариант.
Свет в конце тоннеля
И этот вариант пришел в виде модуля lxml. Он упоминался как раз в теме, в которой ругали xml.dom.minidom за творимое им безобразие 🙂
А теперь давайте взглянем на код генерации хэндла приложения без всяких добавлений и переписываний:
- root = etree.Element( «initialWindow» )
- etree.SubElement(root, «title» ).text = title
- etree.SubElement(root, «content» ).text = content
- etree.SubElement(root, «height» ).text = str(height)
- etree.SubElement(root, «width» ).text = str(width)
- app_window = etree.tostring(root)
- .
- root = etree.Element( «application» , xmlns= «http://ns.adobe.com/air/application/1.5» )
- etree.SubElement(root, «id» ).text = id
- etree.SubElement(root, «version» ).text = version
- etree.SubElement(root, «filename» ).text = filename
- etree.SubElement(root, «name» ).text = self.name
- root.append(etree.XML(app_window))
- handle = etree.tostring(root, pretty_print=True, encoding= ‘utf-8’ , xml_declaration=True)
- applic = open(self.fullpath+ «/» +self.name+ «-app.xml» , «w» )
- applic.writelines(handle)
- applic.close()
Куда понятнее и нагляднее, не находите? Этот код позволяет сгенерировать вот такой чистенький и красивенький XML:
Думаю, 90% кода в объяснении не нуждаются. Вся уличная магия заключена в строчке handle = etree.tostring(root, pretty_print=True, encoding=’utf-8′, xml_declaration=True). Здесь pretty_print — замена того самого злосчастного toprettyxml(), только, в отличие от него, работающая нормально. Также мы задаем кодировку и приделываем стандартную строку заголовка XML-документа.
По утверждениям, этот модуль, как ни странно, работает раза в два быстрее, чем стандартный. Устанавливается он элементарно через setuptools:
$ sudo easy_install lxml
Нормальный туториал лежит на официальном сайте, вот прямая ссылка.
Да здравствует красивый, удобный и валидный код! Удачи вам всем, пишите комментарии.
Преобразование HTML в XML в Python
Высокоскоростная библиотека Python для преобразования HTML в XML. Это профессиональное программное решение для импорта и экспорта HTML, XML и многих других форматов с использованием Python.
Aspose.Cells for Python
Overview
Download from NuGet
Open NuGet package manager, search for and install.
You may also use the following command from the Package Manager Console.
Visit our documentation for more details.
Преобразование HTML в XML с использованием Python
Как преобразовать HTML в XML? С библиотекой Aspose.Cells for Python вы можете легко программно преобразовать HTML в XML с помощью нескольких строк кода. Aspose.Cells for Python способен создавать кроссплатформенные приложения с возможностью создания, изменения, преобразования, рендеринга и печати всех файлов Excel. Python Excel API не только конвертирует форматы электронных таблиц, но также может отображать файлы Excel в виде изображений, PDF, HTML, ODS, CSV, SVG, JSON, WORD, PPT и т. д., что делает его идеальным выбором для обмена документы в отраслевом стандарте форматы.
Сохранить HTML в XML в Python онлайн бесплатно
В следующем примере показано, как преобразовать HTML в XML в Python.
Следуйте простым шагам, чтобы преобразовать HTML в XML. Загрузите файл HTML, а затем просто сохраните его как XML-файл. Как для чтения HTML, так и для записи XML вы можете использовать полные имена файлов. Содержимое и форматирование выходного XML будут идентичны исходному документу HTML.
Бесплатное приложение и пример кода для преобразования HTML в XML онлайн
Input file
Select format
jpype asposecells jpype.startJVM() from asposecells.api import Workbook workbook = Workbook(
Как преобразовать HTML в XML через Python
Нужно программно преобразовать файлы HTML в XML? Разработчики Python могут легко загружать и преобразовывать HTML в XML всего за несколько строк кода.
- Установите «Aspose.Cells for Python via Java».
- Добавьте ссылку на библиотеку (импортируйте библиотеку) в свой проект Python.
- Загрузите файл HTML с экземпляром Workbook.
- Преобразуйте HTML в XML, вызвав метод Workbook.save.
- Получите результат преобразования HTML в XML.
Python библиотека для преобразования HTML в XML
Существует три варианта установки «Aspose.Cells for Python via Java» в вашу систему. Пожалуйста, выберите тот, который соответствует вашим потребностям, и следуйте пошаговым инструкциям:
- Установите Aspose.Cells for Python via Java в Windows. См. Документация
- Установите Aspose.Cells for Python via Java в Linux. Видеть Документация
- Установите Aspose.Cells for Python via Java в macOS. Видеть Документация
Системные Требования
Aspose.Cells for Python via Java не зависит от платформы API и может использоваться на любой платформе (Windows, Linux и MacOS), просто убедитесь, что в системе установлена Java 1.8 или выше, Python 3,5 или выше.
- Установите Java и добавьте его в переменную окружения PATH, например: PATH=C:\Program Files\Java\jdk1.8.0_131; .
- Установить Aspose.Cells for Python изpypi , используйте команду как: $ pip install aspose-cells .
HTML Формат файла HTML
HTML (Hyper Text Markup Language) — это расширение для веб-страниц, созданных для отображения в браузерах. Известный как веб-язык, HTML развился с учетом новых требований к информации, которая должна отображаться как часть веб-страниц. Последний вариант известен как HTML 5, что дает большую гибкость для работы с языком. Страницы HTML либо принимаются с сервера, на котором они размещены, либо также могут быть загружены из локальной системы. Каждая страница HTML состоит из HTML элементов, таких как формы, текст, изображения, анимация, ссылки и т. д. Эти элементы представлены тегами и несколькими другими, где каждый тег имеет начало и конец. Он также может встраивать приложения, написанные на языках сценариев, таких как JavaScript и таблицы стилей (CSS), для общего представления макета.
XML Формат файла XML
XML означает Extensible Markup Language, который похож на HTML, но отличается использованием тегов для определения объектов. Вся идея создания формата файла XML заключалась в том, чтобы хранить и передавать данные, не завися от программных или аппаратных инструментов. Его популярность связана с тем, что он читается как человеком, так и машиной. Это позволяет ему создавать общие протоколы данных в виде объектов, которые будут храниться и совместно использоваться по сети, такой как World Wide Web (WWW). «X» в XML означает расширяемость, что означает, что язык может быть расширен до любого количества символов в соответствии с требованиями пользователя. Именно для этих функций его используют многие стандартные форматы файлов, такие как Microsoft Open XML, LibreOffice OpenDocument, XHTML и SVG.
Другие поддерживаемые преобразования
Вы также можете конвертировать HTML во многие другие форматы файлов, включая некоторые из перечисленных ниже.
Как использовать Python для работы с XML
Изучите основы работы с XML в Python с помощью библиотек xml.etree.ElementTree и lxml для успешной интеграции с различными системами.
Алексей Кодов
Автор статьи
29 июня 2023 в 19:23
XML (eXtensible Markup Language) — это универсальный язык разметки, который позволяет создавать структурированные данные для обмена информацией между различными системами. В этой статье мы познакомимся с основными инструментами для работы с XML в Python.
Библиотека xml.etree.ElementTree
Один из основных модулей для работы с XML в Python — это xml.etree.ElementTree . Он предоставляет функциональность для создания, редактирования и парсинга XML-файлов.
Чтение XML-файла
Для чтения и анализа XML-файла мы можем использовать функцию parse() :
import xml.etree.ElementTree as ET tree = ET.parse('example.xml') root = tree.getroot()
Здесь мы импортируем модуль ElementTree , открываем файл example.xml , а затем получаем корневой элемент дерева XML.
Обход элементов XML
Мы можем обойти все элементы XML-дерева, используя метод iter() :
for elem in root.iter(): print(elem.tag, elem.attrib)
Это выведет название и атрибуты каждого элемента в дереве.
Поиск элементов по тегу
Чтобы найти все элементы с определенным тегом, можно использовать метод findall() :
for elem in root.findall('tag_name'): print(elem.attrib)
Это выведет атрибуты всех элементов с тегом tag_name .
Изменение атрибутов и текста элементов
Мы можем изменить атрибуты и текст элементов следующим образом:
for elem in root.iter('tag_name'): elem.set('attribute_name', 'new_value') elem.text = 'new_text'
Это изменит атрибут attribute_name и текст у всех элементов с тегом tag_name .
Создание новых элементов
Чтобы создать новый элемент, мы можем использовать класс Element :
new_elem = ET.Element('new_tag') new_elem.set('attribute_name', 'attribute_value') new_elem.text = 'element_text'
Затем мы можем добавить его к существующему элементу:
root.append(new_elem)
Сохранение изменений в файл
Чтобы сохранить изменения в файл, мы можем использовать метод write() :
tree.write('output.xml')
Это сохранит измененное дерево XML в файл output.xml .
Python-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT

Библиотека lxml
Еще одна популярная библиотека для работы с XML в Python — это lxml . Она предоставляет более быстрый и гибкий интерфейс для работы с XML-данными.
Установка
Для установки библиотеки lxml , выполните следующую команду:
pip install lxml
Использование
Основы работы с lxml аналогичны xml.etree.ElementTree . Однако, библиотека lxml также предоставляет дополнительные возможности, такие как поддержка XPath и валидация схемы.
from lxml import etree tree = etree.parse('example.xml') root = tree.getroot() result = root.xpath('//tag_name[@attribute_name="value"]')
Здесь мы используем метод xpath() для поиска всех элементов с тегом tag_name , у которых атрибут attribute_name равен «value».
В заключение, мы рассмотрели основные библиотеки и методы для работы с XML в Python. Эти знания помогут вам использовать Python для работы с XML-данными и интеграции с различными системами. Удачи вам в изучении Python!
