我在Python和XML中都是新手,我使用下面的Python代码和XML文件来替换XML文件中变量的值,并用参数{{param}}
中的更新值生成另一个输出XML文件。在
网络会议_有效载荷.py
#!/usr/bin/env python
import os
from jinja2 import Environment, FileSystemLoader
PATH = os.path.dirname(os.path.abspath(__file__))
TEMPLATE_ENVIRONMENT = Environment(
autoescape=False,
loader=FileSystemLoader(os.path.join(PATH, 'templates')),
trim_blocks=False)
def render_template(template_filename, context):
return TEMPLATE_ENVIRONMENT.get_template(template_filename).render(context)
def create_index_html():
fname = "bridge.xml"
param = [3, 'ieee', 3]
context = {
'param': param
}
#
with open(fname, 'w') as f:
html = render_template('bridge.xml', context)
f.write(html)
def main():
create_index_html()
if __name__ == "__main__":
main()
模板/桥.xml
^{pr2}$现在执行命令:python netconf_py.py有效载荷 它将产生一个输出桥.xml文件如下:
<vr>
<vrId>0</vrId>
<bridge>
<bridgeId>3</bridgeId>
<bridgeType>3</bridgeType>
<bridgeId>3</bridgeId>
<bridgeId>ieee</bridgeId>
<bridgeType>ieee</bridgeType>
<bridgeId>ieee</bridgeId>
<bridgeId>3</bridgeId>
<bridgeType>3</bridgeType>
<bridgeId>3</bridgeId>
</bridge>
</vr>
我想要的预期输出是:
<vr>
<vrId>0</vrId>
<bridge>
<bridgeId>3</bridgeId>
<bridgeType>ieee</bridgeType>
<bridgeId>3</bridgeId>
</bridge>
</vr>
那么
param
是一个总是有3个值的列表吗?在这种情况下,我不认为您需要迭代它,而是需要显式地引用列表中的每一项,以获得所需的输出。E、 g您正在循环
param
,这是一个由3个元素组成的列表:对于每个值,您将创建3个元素:
^{pr2}$所以你的产出完全是预期的。在
完全移除循环,只需将3个元素插入3个单独的标记中:
不过,你可能会用字典来命名元素:
以及
或者,如果您需要生成多个
bridgeId
和*可选的和相应的bridgeType
标记,也许您需要一个字典列表:注意,第二个字典在这里没有
'type'
键。然后渲染变成:相关问题 更多 >
编程相关推荐