如何使用python向xml变量插入值

2024-10-02 12:31:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有xml(模板)文件,我使用{$var}在xml中设置变量

我有一个包含xml变量值的列表

如何打开(设置)文件并将xml变量设置为值 从我的名单上

<sut>
    <Cdu>
        <class>XXX</class>
        <conn>
            <class>XXX</class>
            <cli>
                <password>{$password}</password>
                <user>{$user}</user>
                <host>{$host}</host>
                <connectOnInit>false</connectOnInit>
            </cli>
        </conn>
        <basic>
            <class>XXX</class>
        </basic>
    </Cdu>

Tags: 文件模板host列表clibasicvarpassword
3条回答

我将使用^{}按如下方式执行此任务

import re
txt = '''<password>{$password}</password>
<user>{$user}</user>
<host>{$host}</host>'''
data = {"password": "SECRET", "user": "NAME", "host": "LOCAL"}
def replacement(x):
    return data[x.group(1)]
out = re.sub(r'\{\$([^\}]+)\}', replacement, txt)
print(out)

输出

<password>SECRET</password>
<user>NAME</user>
<host>LOCAL</host>

解释:re.sub第二个参数可能是接受匹配对象的函数。我将正则表达式与一个捕获组一起使用,然后使用该内容查找数据dict。注意{$}需要转义,因为它们有特殊的含义,但是我们需要字面上的{$}。免责声明:为了简洁起见,我使用了original的子字符串

您可以使用标准string模块中的模板类:

from string import Template


password = 'secret'
user = 'jack'
host = '12.56.78.123'

xml_template = '''<sut>
    <Cdu>
        <class>XXX</class>
        <conn>
            <class>XXX</class>
            <cli>
                <password>${password}</password>
                <user>${user}</user>
                <host>${host}</host>
                <connectOnInit>false</connectOnInit>
            </cli>
        </conn>
        <basic>
            <class>XXX</class>
        </basic>
    </Cdu>'''

xml = xml_template.substitute(password=password, user=user, host=host)
print(xml)

还有safe_substitute方法,可以在您不确定上下文变量的情况下使用

为什么不直接使用f字符串呢

password = 'secret'
user = 'jack'
host = '12.56.78.123'
xml = f'''<sut>
    <Cdu>
        <class>XXX</class>
        <conn>
            <class>XXX</class>
            <cli>
                <password>{password}</password>
                <user>{user}</user>
                <host>{host}</host>
                <connectOnInit>false</connectOnInit>
            </cli>
        </conn>
        <basic>
            <class>XXX</class>
        </basic>
    </Cdu>'''
print(xml)

输出

<sut>
    <Cdu>
        <class>XXX</class>
        <conn>
            <class>XXX</class>
            <cli>
                <password>secret</password>
                <user>jack</user>
                <host>12.56.78.123</host>
                <connectOnInit>false</connectOnInit>
            </cli>
        </conn>
        <basic>
            <class>XXX</class>
        </basic>
    </Cdu>

相关问题 更多 >

    热门问题