Cоздание xml файла очень просто с elementtree. Пример для xml.yandex.ru

Автор: Igor Kirsanov

Множество сервисов в интернет используют метод взаимодействия через XML файлы, их же используют различные программы, например читают данные из XML документов. Тот же ворд и эксель версии 2007-2010 с расширениями docx и xlsx представляют собой обычный xml файл упакованный в zip архив с небольшим количеством другой технической информации. В общем задача нужная и интересная.

Создание xml файла с помощью elementtree на python очень простая задача

Пример реальный xml файл созданный для работы с xml.yandex.ru (python 2.7) :

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
u"""Создание xml файла для XML.YANDEX."""
import xml.etree.ElementTree as ET  # подключаем библиотеку XML
# ##################### формируем xml для посылки яндексу ############
# создаем документ
root = ET.Element("request")  # рутовый элемент
query = ET.SubElement(root, "query")  # добавляем дочерний элемент к root
query.text = u"яндекс"  # добавляем значение элемента
page = ET.SubElement(root, "page")  # добавляем дочерний элемент к root
page.text = "0"  # добавляем значение элемента
# добавляем дочерний элемент к root
groupings = ET.SubElement(root, "groupings")
# добавляем дочерний элемент к groupings
groupby = ET.SubElement(groupings, "groupby")
groupby.set("attr", "d")  # устанавливаем аттрибут для groupby
groupby.set("mode", "deep")  # устанавливаем еще один аттрибут для groupby
groupby.set("groups-on-page", "10")  # устанавливаем аттрибут
groupby.set("docs-in-group", "1")  # устанавливаем аттрибут
message = ET.tostring(root, "utf-8")  # формируем XML документ в строку message
# Добавляем строчку кодировки для xml файла
doc = '<?xml version="1.0" encoding="UTF-8"?>' + message
# ##################### выводим результат формирования xml на экран ###########
# меняем кодировку чтобы под виндовс было понятно что написано русскими буквами
print doc.decode('utf-8')

Пример для python 3 версии, отличие: работа идет в виде бинарной строки, которую перекодируем до объединения с doc, функция print()

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
u"""Создание xml файла для XML.YANDEX."""
import xml.etree.ElementTree as ET  # подключаем библиотеку XML
# ##################### формируем xml для посылки яндексу ############
# создаем документ
root = ET.Element("request")  # рутовый элемент
query = ET.SubElement(root, "query")  # добавляем дочерний элемент к root
query.text = "яндекс"  # добавляем значение элемента
page = ET.SubElement(root, "page")  # добавляем дочерний элемент к root
page.text = "0"  # добавляем значение элемента
# добавляем дочерний элемент к root
groupings = ET.SubElement(root, "groupings")
# добавляем дочерний элемент к groupings
groupby = ET.SubElement(groupings, "groupby")
groupby.set("attr", "d")  # устанавливаем аттрибут для groupby
groupby.set("mode", "deep")  # устанавливаем еще один аттрибут для groupby
groupby.set("groups-on-page", "10")  # устанавливаем аттрибут
groupby.set("docs-in-group", "1")  # устанавливаем аттрибут
message = ET.tostring(root, "utf-8")  # формируем XML документ в строку message
# Добавляем строчку кодировки для xml файла
doc = '<?xml version="1.0" encoding="UTF-8"?>' + message.decode("utf-8")
# ##################### выводим результат формирования xml на экран ###########
# меняем кодировку чтобы под виндовс было понятно что написано русскими буквами
print (doc)

Результатом будет XML документ в виде строки


<?xml version="1.0" encoding="UTF-8"?><request><query>яндекс</query><page>0</page><groupings><groupby attr="d" docs-in-group="1" groups-on-page="10" mode="deep" /></groupings></request>

Таким образом достаточно просто создали достаточно нужный xml файл для работы с Яндекс XML.