现在我已经在 python 脚本中对整个 xml 文件进行了硬编码,并且只执行了 out.write() ,但现在管理变得越来越困难,因为我有多种类型的 xml 文件。
设置模板的最简单、最快的方法是什么,这样我就可以给出变量名和文件名?
简短的回答是: 您应该关注和处理数据(即 python 对象)而不是原始 XML
基本故事: XML 应该是某些数据或数据集的表示。 你的问题中没有太多关于数据类型、它代表什么等的细节——所以我会给你一些基本的答案。
Python 选择: BeautifulSoup、lxml 和其他 python 库(ElementTree 等),使处理 XML 变得更加容易。与尝试直接使用原始形式的 XML 相比,它们使我能够更轻松地读入或写出 XML 数据。
在这 2 个(输入、输出)活动的中间,我的 python 程序正在处理一个很好的 python 对象或某种我可以行走的解析树。 您可以读入数据,从该字符串创建一个对象,对其进行操作并写出 XML。
其他选择,模板: 好的——也许您喜欢 XML,只是想对其进行“模板化”,以便可以用数据填充它。
如果您并没有真正操作数据,而只是将其表示为输出,那么您可能会对此感到更舒服。而且,这与您当前使用的 XML 字符串类似——所以可能更熟悉。
使用 Cheetah、Jinja 或其他模板库来提供帮助。 使用该模板语言为 XML 文件制作模板。
例如,您刚刚从文件或数据库表中读取书籍列表。 您可以使用模板将此图书对象列表传递给模板引擎,然后告诉它写出您的 XML 输出。
这些书籍对象的示例模板:
<?xml version="1.0"?>
<catalog>
{% for object in object_list %}
<book id="{{ object.bookID }}">
<author>{{ object.author_name }}</author>
<title>{{ object.title }}</title>
<genre>{{ object.genre }}</genre>
<price>{{ object.price }}</price>
<publish_date>{{ object.pub_date }}</publish_date>
<description>{{ object.description }}</description>
</book>
{% endfor %}
</catalog>
模板引擎将循环遍历“object_list”并输出一个包含所有书籍的长 XML 文件。这比您目前存储原始 XML 字符串要好得多。
这使得 XML 显示的更新和修改与数据、数据存储和数据操作分开——让您的生活更轻松。
两个选择。
模板工具,例如Jinja2。
构建 DOM 对象。 并不像听起来那么糟糕。 ElementTree 有一个令人愉快的工厂,用于构建 XML 标签和创建必要的结构。
轻量级选项是 xml.dom.minidom
xml.dom.minidom 是文档对象模型接口的轻量级实现。它的目的是比完整的 DOM 更简单,并且也更小。
您可以使用
xml.dom
API 创建 DOM 对象,例如 DOM 元素对象,并使用 Node.writexml
生成 XML。请注意,这需要构建 DOM 层次结构,这可能不是您想要的。
更多Pythonic选项是ElementTree。
Element 类型是一种灵活的容器对象,旨在在内存中存储分层数据结构。该类型可以描述为列表和字典之间的交叉。
ElementTree 对象在
Python
中更容易创建和处理,并且可以使用 ElementTree.dump() 或 ElementTree.tostring() 序列化为 XML
您要求最简单和最快,所以请参阅这篇文章:http://blog.simonwillison.net/post/58096201893/simpletemplates
如果您想要更智能的东西,请查看这里。
YAPTU 和 Palmer 的 yaptoo 变体应该可以使用 - 但现在有很多很多其他通用且强大的模板引擎可供选择。 这里有一个相当完整的列表。