在Python中快速简单地模板化XML文件的方法
现在我在我的Python脚本里把整个XML文件写死了,也就是直接写进去,然后用out.write()来输出。但是这样管理起来越来越麻烦,因为我有很多种不同类型的XML文件。
有没有什么简单快捷的方法可以设置模板,这样我只需要提供变量名和文件名就行了?
5 个回答
一个轻量级的选择是 xml.dom.minidom
xml.dom.minidom 是一个轻量级的文档对象模型(DOM)接口实现。它的设计目的是比完整的 DOM 更简单,而且体积也小得多。
你可以使用 xml.dom
这个API来创建DOM对象,比如 DOM元素对象,然后用 Node.writexml
来生成XML。不过要注意,这需要构建DOM层次结构,这可能不是你想要的。
另一个更符合Python风格的选择是 ElementTree。
Element类型是一个灵活的容器对象,旨在存储内存中的层次数据结构。可以把它看作是列表和字典的结合体。
在 Python
中,创建和处理ElementTree对象更简单,并且可以通过 ElementTree.dump() 或 ElementTree.tostring() 将其序列化为XML。
简短回答:你应该专注于处理数据(也就是 Python 对象),而不是直接处理原始的 XML。
基本情况: XML 是用来表示某些数据或数据集的。你在问题中没有提供很多关于数据类型、它代表什么等细节,所以我会给你一些基本的回答。
Python 的选择: 使用 BeautifulSoup、lxml 和其他 Python 库(比如 ElementTree 等)可以让处理 XML 变得更简单。它们让我可以更轻松地读取或写出 XML 数据,而不是直接用原始的 XML 来处理。
在这两种操作(输入和输出)之间,我的 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>
</xml>
模板引擎会遍历“object_list”,输出一个包含所有书籍的长 XML 文件。这比你现在存储原始 XML 字符串要好得多。
这样,更新和修改 XML 的显示就和数据、数据存储、数据操作分开了,这样会让你的生活更轻松。
你问的是最简单和最快的方法,所以可以看看这个帖子:http://blog.simonwillison.net/post/58096201893/simpletemplates
如果你想要更聪明一点的选择,可以看看这里。