【问题标题】:Write XML Python - Special characters error in list of string编写 XML Python - 字符串列表中的特殊字符错误
【发布时间】:2020-09-23 06:38:18
【问题描述】:

我有一个要写入 XML 文件的字符串列表。我的代码如下所示:

from jinja2 import Environment, PackageLoader, select_autoescape   
import os

env = Environment(loader = PackageLoader(path),
                      autoescape = select_autoescape(['html', 'xml']))

list_data = ['<managedObject class="test" operation="test"/>', '<managedObject class="test" operation="test"/>']

template = env.get_template('template.xml')
output_from_parsed_template = template.render(scripts=list_data)
path = os.path.join("output_file.xml")
with open(str(path), "wb") as fh:
      fh.write(output_from_parsed_template.encode('utf-8'))

我的 template.xml 看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
{% for script in scripts %}
     {{ script }}
{% endfor %}

我在 output_file.xml 中收到以下错误:

<?xml version="1.0" encoding="UTF-8"?>
&lt;managedObject class=&#34;test&#34; operation=&#34;test&#34;/&gt;

&lt;managedObject class=&#34;test&#34; operation=&#34;test&#34;/&gt;

您知道如何在 XML 中编写所有特殊字符(双引号和 inf/supp 符号)吗? 我用同样的函数写一个txt文件,没有这个问题。

感谢您的帮助

【问题讨论】:

  • {{ script | safe }} - 这样 Jinja 将 XML/HTML 保持原样 - 无需转换为阻止黑客注入的更安全版本。
  • 或者您应该删除 autoescape= 以保持 XML/HTML 原样。

标签: python django xml jinja2


【解决方案1】:

问题不是在 Jinja 中写入而是自动转义。

你必须使用

 {{ script | safe }}

在没有自动转义的情况下放置 XML/HTML。

或者从代码中删除行autoescape=select_autoescape(['html', 'xml'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 2013-04-15
    • 1970-01-01
    • 2019-02-04
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多