Написание XML из Python: Python эквивалент .NET XmlTextWriter? - PullRequest
3 голосов
/ 21 июня 2009

У меня есть некоторый код IronPython, который использует XmlTextWriter, который позволяет мне писать код, подобный

self.writer = System.Xml.XmlTextWriter(filename, None)
self.writer.Formatting = Formatting.Indented
self.writer.WriteStartElement(name)
self.writer.WriteString(str(text))
self.writer.WriteEndElement()

...

self.writer.Close()

Я хотел бы сделать мой код переносимым между реализациями Python (CPython, IronPython и Jython). Есть ли потоковый Python XML Writer, который я могу использовать для этого без необходимости использовать либо операторы print, либо создавать целое дерево DOM перед записью его в файл?

Ответы [ 3 ]

3 голосов
/ 21 мая 2010

Я написал модуль с именем loxun, чтобы сделать это: http://pypi.python.org/pypi/loxun/. Он работает с CPython 2.5 и Jython 2.5, но я никогда не пробовал его с IronPython.

Пример использования:

with open("...", "wb") as out:
  xml = XmlWriter(out)
  xml.addNamespace("xhtml", "http://www.w3.org/1999/xhtml")
  xml.startTag("xhtml:html")
  xml.startTag("xhtml:body")
  xml.text("Hello world!")
  xml.tag("xhtml:img", {"src": "smile.png", "alt": ":-)"})
  xml.endTag()
  xml.endTag()
  xml.close()

И результат:

<?xml version="1.0" encoding="utf-8"?>
<xhtml:html xlmns:xhtml="http://www.w3.org/1999/xhtml">
  <xhtml:body>
    Hello world!
    <xhtml:img alt=":-)" src="smile.png" />
  </xhtml:body>
</xhtml:html>

Помимо других функций, он обнаруживает неправильно подписанные теги во время записи, использует потоковый API с небольшим объемом памяти, поддерживает Unicode и позволяет отключить красивую печать.

2 голосов
/ 21 июня 2009

Я написал инструмент для облегчения генерации XML из Python ( код и учебник )

2 голосов
/ 21 июня 2009

Я никогда не использовал реализацию .NET, о которой вы говорите, но похоже, что ближе всего вы получите Python SAX parser (в частности, XMLGenerator класс - пример кода здесь ).

...