You need to enable JavaScript to run this app. Python 基于子元素条件删除带命名空间的XML父元素
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 16:36:08