我有两个xml文件快照。
输入xml :
所需的输出XML :
我需要使用python脚本在标签为<triggers\>
的父节点上添加几个子节点。
要添加的子节点的示例在output.xml快照中以灰色突出显示。
完成标记以替换triggers
节点。
<triggers>
<hudson.triggers.TimerTrigger>
<spec>1 1 1 1 1</spec>
</hudson.triggers.TimerTrigger>
</triggers>
有人在使用python脚本遇到上述标记时,有人可以用python脚本帮助我替换非空标记吗?
答案 0 :(得分:1)
您可以使用ET.SubElement
为给定节点创建子元素。更多信息here。
然后,您可以将.text
设置为该节点的值。
例如,考虑以下输入xml文档:
<root>
<triggers/>
<triggers/>
</root>
尝试一下:
import xml.etree.ElementTree as ET
tree = ET.parse('input.xml')
root = tree.getroot()
#Get all triggers elements
trigger_elements = root.findall('./triggers')
#For each trigger element in your xml document
for trigger in trigger_elements:
#Make subelement to the initial trigger element
time_trigger_element = ET.SubElement(trigger, 'hudson.triggers.TimerTrigger')
#Make subelement to the time trigger elemenent with name 'spec'
spec_element = ET.SubElement(time_trigger_element, 'spec')
#Set the text of spec element to 1 1 1 1 1
spec_element.text = ' '.join(['1']*5)
#Save the xml tree to a file
tree.write("output.xml")
输出:
<root>
<triggers><hudson.triggers.TimerTrigger><spec>1 1 1 1 1</spec></hudson.triggers.TimerTrigger></triggers>
<triggers><hudson.triggers.TimerTrigger><spec>1 1 1 1 1</spec></hudson.triggers.TimerTrigger></triggers>
</root>
答案 1 :(得分:0)
如果要使用BeautifulSoup进行操作,可以尝试执行以下操作:
code1 = """
<triggers/>
"""
code2 = """
<triggers>
<hudson.triggers.TimerTrigger>
<spec>1 1 1 1 1</spec>
</hudson.triggers.TimerTrigger>
</triggers>
"""
from bs4 import BeautifulSoup as bs
soup1 = bs(code1)
soup2 = bs(code2)
old = soup1.find('triggers')
new = soup2.find('triggers')
old.replaceWith(new)
print(soup1)