В наши дни наиболее популярным (и очень простым) вариантом является ElementTree API , который был включен в стандартную библиотеку начиная с Python 2.5.
Доступны следующие варианты::
- ElementTree (Базовая реализация ElementTree на чистом Python. Часть стандартной библиотеки с 2.5)
- cElementTree (Оптимизированная реализация ElementTree на C. Также предлагается в стандартной библиотеке с2.5)
- LXML (на основе libxml2. Предлагает богатый расширенный набор API ElementTree, а также XPath, CSS-селекторы и многое другое)
Вот пример того, как сгенерировать ваш примердокумент с использованием in-stdlib cElementTree:
import xml.etree.cElementTree as ET
root = ET.Element("root")
doc = ET.SubElement(root, "doc")
ET.SubElement(doc, "field1", name="blah").text = "some value1"
ET.SubElement(doc, "field2", name="asdfasd").text = "some vlaue2"
tree = ET.ElementTree(root)
tree.write("filename.xml")
Я проверил его, и он работает, но я предполагаю, что пробел не имеет существенного значения.Если вам нужен отступ "prettyprint", дайте мне знать, и я посмотрю, как это сделать.(Это может быть специфичный для LXML вариант. Я не очень часто использую реализацию stdlib)
Для дальнейшего прочтения вот несколько полезных ссылок:
В качестве заключительного замечания, либо cElementTree, либо LXML должны быть достаточно быстрыми для всех ваших потребностей (оба оптимизированных кода C),но в случае, если вам нужно выжать все до последней черты производительности, тесты на сайте LXML показывают, что:
- LXML явно выигрывает для сериализации (генерации) XML
- В качестве побочного эффекта от реализации правильного обхода родителя LXML немного медленнее, чем cElementTree для анализа.