我有xml文件如下:
onScrollStateChanged
尝试运行此Python脚本以删除具有特定ID的“广告系列”。
<plugin-config>
<properties>
<property name="AZSRVC_CONNECTION" value="diamond_plugins@AZSRVC" />
<property name="DIAMOND_HOST" value="10.0.230.1" />
<property name="DIAMOND_PORT" value="3333" />
</properties>
<pack-list>
<vsme-pack id="monthly_50MB">
<campaign-list>
<campaign id="2759" type="SOB" />
<campaign id="2723" type="SUBSCRIBE" />
</campaign-list>
</vsme-pack>
<vsme-pack id="monthly_500MB">
<campaign-list>
<campaign id="3879" type="SOB" />
<campaign id="3885" type="SOB" />
<campaign id="2724" type="SUBSCRIBE" />
<campaign id="1111" type="COB" /></campaign-list>
</vsme-pack>
</pack-list>
</plugin-config>
我运行脚本,但out与输入文件相同,因此不会删除元素。
答案 0 :(得分:0)
问题:
这是找到所需节点的错误方法。您正在搜索vsme-pack并尝试查找广告系列列表和广告系列?哪种格式不正确。
camp_list = pack_list.find(".//vsme-pack[@id='{pack_id}']".format(pack_id=pack_id)).find('campaign-list').findall('campaign')
修正代码示例
这是从xml中删除节点的工作代码
import xml.etree.ElementTree as ET
root = ET.parse('pack-assign-config.xml')
# Alternatively, parse the XML that lives in 'filename_path'
# tree = ElementTree.parse(filename_path)
# root = tree.getroot()
# Find the parent element of each "weight" element, using XPATH
for parent in root.findall('.//pack-list/'):
# Find each weight element
for element in parent.findall('campaign-list'):
for camp_list in element.findall('campaign'):
if camp_list.get('id') == '2759' or camp_list.get('id') == '3879' :
element.remove(camp_list)
root.write("out.xml")
希望这会有所帮助