添加带有Sam名称的子节点的XML节点



我有键值对:task_vars = '{"BNS_DT": "20220831","DWH_BD": "dwh_bd=2022-08-31","LAYR_CD": "STG"}'

我想用它生成子节点variable:tsk_var = ET.fromstring("""<variable><name></name><value></value></variable>""")

,然后在:payload = ET.fromstring("""<task-launch><variables></variables><name>{}</name></task-launch>""".format(task_name))

中添加variables

节点我循环遍历键值并尝试追加variablesnode:

tsk_vars = json.loads(task_vars)
for name, value in tsk_vars.items():
for nm in tsk_var.iter('name'):
nm.text = name
for vl in tsk_var.iter('value'):
vl.text = value
print('to be added')
print(ET.tostring(tsk_var))
payload.find('variables').append(tsk_var)

当我打印出variables应该被附加的子节点时,我在每次迭代中都得到了正确的值。但在最终结果中,我得到了正确数量的子节点,但所有子节点都填充了最后一个键值:

<task-launch>
<variables>
<variable>
<name>LAYR_CD</name>
<value>STG</value>
</variable>
<variable>
<name>LAYR_CD</name>
<value>STG</value>
</variable>
<variable>
<name>LAYR_CD</name>
<value>STG</value>
</variable>
</variables>

请问我是否得到每个variable子节点的正确值?

试试这样做:

destination = payload.find('.//variables')
# use f-strings to insert the values into the <variable> children
for name, value in tsk_vars.items():
new_childs = ET.fromstring(f"""<variable><name>{name}</name><value>{value}</value></variable>""")
destination.insert(0,new_childs)
#the line below requires python 3.9+
ET.indent(payload, space='  ', level=0)
print(ET.tostring(payload).decode())

输出:

<task-launch>
<variables>
<variable>
<name>LAYR_CD</name>
<value>STG</value>
</variable>
<variable>
<name>DWH_BD</name>
<value>dwh_bd=2022-08-31</value>
</variable>
<variable>
<name>BNS_DT</name>
<value>20220831</value>
</variable>
</variables>
</task-launch>

最新更新