Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中快速简便地模板化xml文件_Python_Xml - Fatal编程技术网

在python中快速简便地模板化xml文件

在python中快速简便地模板化xml文件,python,xml,Python,Xml,现在我已经在python脚本中硬编码了整个xml文件,并且只做了out.write(),但是现在管理起来越来越困难,因为我有多种类型的xml文件 设置模板的最简单、最快捷的方法是什么,这样我就可以给变量名amd filename?如果您想要非常简单和轻量级的东西,我的古代版本和Palmer的版本应该是可用的——但是现在有很多其他通用且功能强大的模板引擎可供选择。一个非常完整的列表是。您要求的是最简单和最快速的,因此请参阅以下帖子: 如果你想要更聪明的东西,看看。两个选择 例如,模板工具 构建DO

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


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

如果您想要非常简单和轻量级的东西,我的古代版本和Palmer的版本应该是可用的——但是现在有很多其他通用且功能强大的模板引擎可供选择。一个非常完整的列表是。

您要求的是最简单和最快速的,因此请参阅以下帖子:

如果你想要更聪明的东西,看看。

两个选择

  • 例如,模板工具

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

  • 一个轻量级的选项是

    minidom是文档对象模型接口的轻量级实现。它的目的是比完整的DOM更简单,而且要小得多

    例如,您可以使用
    xml.DOM
    API创建DOM对象,并使用生成xml。请注意,这需要构建DOM层次结构,这可能不是您想要的

    更多的pythonic选项是

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


    ElementTree对象在
    Python
    中更易于创建和处理,并且可以使用或序列化为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.author_name}
    {{object.title}}
    {{object.genre}
    {{object.price}}
    {{object.pub_date}
    {{object.description}}
    {%endfor%}
    
    模板引擎将循环遍历“对象列表”,并输出一个包含所有书籍的长XML文件。这将比存储原始XML字符串要好得多,正如您目前所做的那样


    这使得XML显示的更新和修改与数据、数据存储和数据操作分离开来,使您的生活更轻松。

    简单方法的问题在于它太简单了:当包含的文本第一次包含一个符号时,它就中断了,这不是什么疯狂的百万分之一边缘大小写。