用Python写XML:Python相当于.NET的XmlTextWriter吗?

3 投票
3 回答
1792 浏览
提问于 2025-04-15 12:23

我有一些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

我写了一个工具,可以帮助从Python生成XML文件(代码教程

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,并且可以关闭美化打印。

撰写回答