在用 xml.etree.ElementTree 模块批量删除xml标签的时候,会出现的问题是,用遍历并不能一次将复合条件的标签删掉。
如下:
在从网上看到有网友说,remove()每次删除标签的时候,都会重新获取对象。根据自己出现的情况于是找到了核实的方法:
就是将你删除的lebian标签个数统计出来,然后每删除一个标签,获取一下文件的对象。
步骤如下:
1:打开xml 文件获取root标签
2:将符合条件的标签进行删除
3:重新将删除后的xml写入文件。
4:一次遵循上面1-3的步骤,直到删除完毕
def main(filename,log):
num=0
try:
tree=ET.parse(filename)
root=tree.getroot()
for i in root.getchildren():
for chid in i.attrib:
if i.attrib[chid].find("lebian")>=0 or i.attrib[chid].find("Lebian")>=0:
num=num+1
break;
except Exception,e:
print e
finally:
return num
def remove(num,filename,log):
time=0;
while(time
root=tree.getroot()
for i in root.getchildren():
for chid in i.attrib:
if i.attrib[chid].find("lebian")>=0 or i.attrib[chid].find("Lebian")>=0:
time=time+1
root.remove(i)
break;
tree.write(filename,encoding="utf-8",xml_declaration=True)