在 python 中快速、简单地模板 xml 文件

问题描述 投票:0回答:5

现在我已经在 python 脚本中对整个 xml 文件进行了硬编码,并且只执行了 out.write() ,但现在管理变得越来越困难,因为我有多种类型的 xml 文件。

设置模板的最简单、最快的方法是什么,这样我就可以给出变量名和文件名?

python xml
5个回答
6
投票

简短的回答是: 您应该关注和处理数据(即 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 显示的更新和修改与数据、数据存储和数据操作分开——让您的生活更轻松。


4
投票

两个选择。

  1. 模板工具,例如Jinja2

  2. 构建 DOM 对象。 并不像听起来那么糟糕。 ElementTree 有一个令人愉快的工厂,用于构建 XML 标签和创建必要的结构。


4
投票

轻量级选项是 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

1
投票

您要求最简单和最快,所以请参阅这篇文章:http://blog.simonwillison.net/post/58096201893/simpletemplates

如果您想要更智能的东西,请查看这里


© www.soinside.com 2019 - 2024. All rights reserved.