在python中模板化xml文件的快捷方法

时间:2009-06-28 15:28:45

标签: python xml

现在我已经在我的python脚本中硬编码了整个xml文件,只是做了out.write(),但是现在它变得越来越难以管理,因为我有多种类型的xml文件。

设置模板的最简单,最快捷的方法是什么,以便我可以给变量名amd filename?

5 个答案:

答案 0 :(得分:4)

轻量级选项是xml.dom.minidom

  

xml.dom.minidom是文档对象模型接口的轻量级实现。它旨在比完整的DOM更简单,也更小。

您可以使用xml.dom API创建DOM对象,例如DOM Element objects,并使用Node.writexml生成XML。请注意,这需要构建DOM层次结构,这可能不是您所追求的。

更多pythonic选项是ElementTree

  

Element类型是一个灵活的容器对象,旨在将分层数据结构存储在内存中。该类型可以描述为列表和字典之间的交叉。

ElementTree对象更易于在Python中创建和处理,并且可以使用ElementTree.dump()ElementTree.tostring()

序列化为XML

答案 1 :(得分:3)

两种选择。

  1. 模板工具,例如Jinja2

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

答案 2 :(得分:3)

简短回答是:你应该关注和处理数据(即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字符串要好得多

这使更新&amp;修改XML的显示,与数据,数据存储和数据操作分开 - 让您的生活更轻松。

答案 3 :(得分:1)

如果你想要一些非常简单和轻巧的东西,我的古代YAPTU和帕尔默的yaptoo变体应该是可用的 - 但是还有许多其他通用和强大的模板引擎可供选择,这些天。一个非常完整的列表是here

答案 4 :(得分:0)

您要求最简单,最快捷,请参阅此帖:http://blog.simonwillison.net/post/58096201893/simpletemplates

如果您想要更聪明的事情,请查看here