Для серйозної роботи з XML в Python використовуйте lxml
Python постачається із вбудованою бібліотекою ElementTree, але lxml розширює її з точки зору швидкості та функціональності (перевірка схем, синтаксичний аналіз sax, XPath, різноманітні ітератори та багато інших функцій).
Вам доведеться його встановити, але в багатьох місцях це вже вважається частиною стандартного обладнання (наприклад, Google AppEngine не дозволяє пакети Python на основі C, але робить виняток для lxml, pyyaml та деяких інших).
Створення XML-документів за допомогою E-factory (від lxml)
Ваше питання стосується створення XML-документа.
З lxml існує безліч методів, і мені знадобився час, щоб знайти той, який, здається, простий у використанні, а також легко читається.
Зразок коду з документа lxml щодо використання E-factory (трохи спрощений):
E-factory забезпечує простий та компактний синтаксис для генерації XML та HTML:
>>> from lxml.builder import E
>>> html = page = (
... E.html( # create an Element called "html"
... E.head(
... E.title("This is a sample document")
... ),
... E.body(
... E.h1("Hello!"),
... E.p("This is a paragraph with ", E.b("bold"), " text in it!"),
... E.p("This is another paragraph, with a", "\n ",
... E.a("link", href="http://www.python.org"), "."),
... E.p("Here are some reserved characters: <spam&egg>."),
... )
... )
... )
>>> print(etree.tostring(page, pretty_print=True))
<html>
<head>
<title>This is a sample document</title>
</head>
<body>
<h1>Hello!</h1>
<p>This is a paragraph with <b>bold</b> text in it!</p>
<p>This is another paragraph, with a
<a href="http://www.python.org">link</a>.</p>
<p>Here are some reserved characters: <spam&egg>.</p>
</body>
</html>
Я високо ціную на E-factory, що він слідкує за речами
Код читається майже як отриманий XML-документ
Підрахунок читабельності.
Дозволяє створювати будь-який вміст XML
Підтримує такі речі, як:
- використання просторів імен
- початковий і кінцевий текстові вузли в межах одного елемента
- функції форматування вмісту атрибута (див. func CLASS у повному зразку lxml )
Дозволяє дуже читабельні конструкції зі списками
наприклад:
from lxml import etree
from lxml.builder import E
lst = ["alfa", "beta", "gama"]
xml = E.root(*[E.record(itm) for itm in lst])
etree.tostring(xml, pretty_print=True)
в результаті:
<root>
<record>alfa</record>
<record>beta</record>
<record>gama</record>
</root>
Висновки
Я настійно рекомендую прочитати підручник lxml - він дуже добре написаний і дасть вам ще багато причин використовувати цю потужну бібліотеку.
Єдиним недоліком lxml є те, що він повинен бути скомпільований. Докладніше про те, як встановити lxml із пакета формату колеса за долі секунди, див. У розділі SO-відповідь .