python ElementTree删除问题

时间:2018-04-02 12:48:40

标签: python elementtree

我有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与输入文件相同,因此不会删除元素。

1 个答案:

答案 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")

希望这会有所帮助