要在 Python 中认真处理 XML,请使用 lxml
Python 带有 ElementTree 内置库,但 lxml 在速度和功能(模式验证、sax 解析、XPath、各种迭代器和许多其他功能)方面对其进行了扩展。
您必须安装它,但在许多地方,它已经被假定为标准设备的一部分(例如 Google AppEngine 不允许基于 C 的 Python 包,但对 lxml、pyyaml 和其他少数几个例外) .
使用 E-factory 构建 XML 文档(来自 lxml)
您的问题是关于构建 XML 文档的。
lxml的方法很多,找了好久才找到,貌似好用也好读。
来自lxml doc on using E-factory 的示例代码(略微简化):
E-factory 为生成 XML 和 HTML 提供了一种简单而紧凑的语法:
>>> from lxml.builder import E
>>> html = page = (
... E.html( # create an Element called "html"
... E.head(
... E.title("This is a sample document")
... ),
... E.body(
... E.h1("Hello!"),
... E.p("This is a paragraph with ", E.b("bold"), " text in it!"),
... E.p("This is another paragraph, with a", "\n ",
... E.a("link", href="http://www.python.org"), "."),
... E.p("Here are some reserved characters: <spam&egg>."),
... )
... )
... )
>>> print(etree.tostring(page, pretty_print=True))
<html>
<head>
<title>This is a sample document</title>
</head>
<body>
<h1>Hello!</h1>
<p>This is a paragraph with <b>bold</b> text in it!</p>
<p>This is another paragraph, with a
<a href="http://www.python.org">link</a>.</p>
<p>Here are some reserved characters: <spam&egg>.</p>
</body>
</html>
我很欣赏 E-factory 它遵循的东西
代码读取几乎与生成的 XML 文档一样
可读性很重要。
允许创建任何 XML 内容
支持以下内容:
允许非常易读的列表结构
例如:
from lxml import etree
from lxml.builder import E
lst = ["alfa", "beta", "gama"]
xml = E.root(*[E.record(itm) for itm in lst])
etree.tostring(xml, pretty_print=True)
导致:
<root>
<record>alfa</record>
<record>beta</record>
<record>gama</record>
</root>
结论
我强烈推荐阅读 lxml 教程——它写得非常好,会给你更多使用这个强大库的理由。
lxml 唯一的缺点是它必须被编译。请参阅SO answer for more tips 如何在几分之一秒内从 wheel 格式包中安装 lxml。