用Python写XML:Python相当于.NET的XmlTextWriter吗?
我有一些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写入工具可以让我使用,而不需要用打印语句,或者在写入文件之前构建一个完整的DOM树呢?
3 个回答
2
我没用过你说的.NET实现,但听起来最接近的可能是Python的SAX解析器(特别是XMLGenerator类——这里有一些示例代码在这里)。
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,并且可以关闭美化打印。