Python 基于子元素条件删除带命名空间的XML父元素
修正后可直接运行的代码
from lxml import etree import os path = "C:\\users\\mdl518\\Desktop\\" # 解析XML文件 tree = etree.parse(os.path.join(path,"metadata_info.xml")) root = tree.getroot() # 遍历所有元素,匹配文本为nan的节点 for elem in root.iter(): # 跳过空文本节点,避免运行报错 if elem.text is None: continue if elem.text.strip() == 'nan': # 获取当前nan元素对应的父节点(待删除目标) target_parent = elem.getparent() # 获取上层节点执行删除操作 grand_parent = target_parent.getparent() grand_parent.remove(target_parent) # 输出处理后的XML with open(os.path.join(path, "metadata_output.xml"), "wb") as f: f.write(etree.tostring(tree, xml_declaration=True, encoding='utf-8'))
改动说明
- 修正了原代码变量名不一致的问题:原代码定义解析对象为
tree,后续错误使用了未定义的tree_2,会直接触发运行报错 - 扩大了元素匹配范围:使用
iter()遍历文档所有元素,无需单独指定命名空间,可覆盖所有命名空间下文本值为nan的节点,包括<lan:location>、<lis:employment>等非gam命名空间的元素 - 调整了删除逻辑:匹配到文本为
nan的子元素后,直接删除子元素对应的父节点,同时会自动移除该父节点下的所有子内容,完全符合删除子元素及对应父元素的需求 - 增加了空文本判断,避免无文本的元素触发属性报错
内容的提问来源于stack exchange,提问作者mdl518
相关产品推荐
相关产品推荐

