Python处理XML:删除缺少A或B子节点的dataset元素问题
问题原因
你原有代码的逻辑存在两处核心错误:
- 遍历得到的
element本身就是<dataset>节点,它的tag属性永远是dataset,判断它的标签是否为A/B完全不符合需求,你应该检查的是当前dataset节点下是否同时存在A和B两个子节点 - 错误的判断条件导致代码执行逻辑完全偏离预期,自然无法得到正确结果。
修正后可直接运行的代码
import xml.etree.ElementTree as ET tree = ET.parse("file.xml") root = tree.getroot() # 用list包裹findall结果,避免遍历过程中删除节点导致的遍历异常 for dataset in list(root.findall('dataset')): # 检查当前dataset下是否同时存在A、B子节点 has_a = dataset.find('A') is not None has_b = dataset.find('B') is not None # 不同时存在则删除该dataset节点 if not (has_a and has_b): root.remove(dataset) # 保存处理后的文件,保留XML声明头 tree.write("output.xml", encoding="utf-8", xml_declaration=True)
代码说明
- 运行后生成的
output.xml就和你预期的结果完全一致,仅保留了同时有A、B子节点的001、002两个dataset节点 dataset.find('A')会查找当前dataset下的直接子节点A,返回None即代表节点不存在,判断逻辑精准符合你的需求- 写入文件时指定
xml_declaration=True,可以保留XML标准的版本声明头,格式和原文件一致。
内容的提问来源于stack exchange,提问作者Iwishworldpeace
相关产品推荐
相关产品推荐

