training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

Как сгенерировать xml при помощи модуля xml.dom.minidom Python

Создано: 21 сентября 2017Автор: Егор Астапов3181 просмотрСложность: легкий

Я решил сгенерировать xml-документ версии 1.0 и начал искать материал в интернете. Нашел интересную статью Создание XML в Python 3. Я повторил пример и решил на его основе сделать свой пример. Я пришёл к выводу, что в генерации эксемельного документа ничего сложного нет. Возможно я не прав, потому что мне попался простой пример.

Если вам внезапно захотелось создать XML только встроенными средствами языка Python, то выход есть: xml.dom.minidom. Модуль обладает такими возможностями как CDATA или prettyprint. Сам модуль встроенный. Вам не придётся его закачивать.

Рассмотрит элементы в XML-документе:

  • root - корневой элемент, может быть только один. Это не отдельный тип. Корень может быть как ветвью, так и смешанным и даже листом. Он может быть пустым
  • name - название всего xml-документа
  • product - 'ветвь', имеет дочерние 'ветви' и 'листья', без текста
  • decr - 'лист', не имеет дочерних элементов, содержит только текстовый узел или ничего
  • text - 'лист', не имеет дочерних элементов, содержит только текстовый узел или ничего
  • price - 'лист', не имеет дочерних элементов, содержит только текстовый узел или ничего

from xml.dom import minidom

#создаём объект
doc = minidom.Document()

#корневой тег root
root = doc.createElement('root')
doc.appendChild(root)

name = doc.createElement('name')
text = doc.createTextNode('Production for you')
name.appendChild(text)
root.appendChild(name)

#первый блок product
product = doc.createElement('product')
product.setAttribute('color', 'white')

#описание
decr = doc.createElement('decr')
text = doc.createTextNode('Text decr 1')
decr.appendChild(text)
decr.setAttribute('color', 'green')
product.appendChild(decr)

#статья
article = doc.createElement('text')
text = doc.createTextNode('Text article 1')
article.appendChild(text)
article.setAttribute('color', 'white')
product.appendChild(article)

#цена
price = doc.createElement('price')
text = doc.createTextNode('100 rub')
price.appendChild(text)
price.setAttribute('red', 'green')
product.appendChild(price)

root.appendChild(product)


#второй блок product
product = doc.createElement('product')
product.setAttribute('color', 'white')

#описание
decr = doc.createElement('decr')
text = doc.createTextNode('Text decr 2')
decr.appendChild(text)
decr.setAttribute('color', 'green')
product.appendChild(decr)

#статья
article = doc.createElement('text')
text = doc.createTextNode('Text article 2')
article.appendChild(text)
article.setAttribute('color', 'white')
product.appendChild(article)

#цена
price = doc.createElement('price')
text = doc.createTextNode('200 rub')
price.appendChild(text)
price.setAttribute('red', 'green')
product.appendChild(price)

root.appendChild(product)

#запись в файл
xml_str = doc.toprettyxml(indent="  ")
with open("product.xml", "w") as f:
    f.write(xml_str)

Результат у вас записывается в файл product.xml. В итоге получился xml-документ версии 1.0. Документ состоит из двух блоков. Вы можете сгенерировать массу блоков product при помощи цикла.


<?xml version="1.0" ?>
<root>
  <name>Production for you</name>
  <product color="white">
    <decr color="green">Text decr 1</decr>
    <text color="white">Text article 1</text>
    <price red="green">100 rub</price>
  </product>
  <product color="white">
    <decr color="green">Text decr 2</decr>
    <text color="white">Text article 2</text>
    <price red="green">200 rub</price>
  </product>
</root>

О том как распарсить product.xml написано в статье: Как распарсить xml при помощи модуля xml.dom.minidom Python.

Комментарии

реклама