从Python编写XML:Python相当于.NET XmlTextWriter?

时间:2009-06-20 20:10:29

标签: python xml ironpython jython

我有一些使用XmlTextWriter的IronPython代码,它允许我编写像

这样的代码
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编写器而无需使用任何print语句,或者在将其写入文件之前构造整个DOM树?

3 个答案:

答案 0 :(得分:3)

我写了一个名为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并允许禁用漂亮的打印。

答案 1 :(得分:2)

我从来没有使用过你正在谈论的.NET实现,但听起来你最接近的是Python SAX parser(具体来说,XMLGenerator class - 一些样本代码here)。

答案 2 :(得分:2)

我编写了一个工具来促进Python生成XML(codetutorial