You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用lxml处理XML时如何不借助for循环批量删除多个同名子节点

报错原因和解决方案

你遇到的报错是因为lxml.etree._Element的remove()方法仅支持传入单个Element对象作为参数,无法直接接收节点列表。

无需显式for循环的解决方案

方法1:使用lxml内置批量删除方法etree.strip_elements(最推荐)

这是lxml原生提供的批量删除指定标签子节点的方法,无需自己处理循环逻辑,一行即可完成:

import lxml.etree as etree

# 已获取malay_node的前提下,直接删除该节点下所有的holidays子节点
etree.strip_elements(malay_node, 'holidays', with_tail=False)

参数说明:

  • 第一个参数是父节点,指定仅删除该节点下的对应标签
  • 第二个参数是要删除的标签名
  • with_tail=False 避免误删holidays节点尾部附带的文本内容,无额外文本时也可省略

如果holidays节点带命名空间,建议使用下面的方法2,避免标签名匹配失败。

方法2:基于已有节点列表用map隐式执行删除

如果你已经提前查到了要删除的节点列表,可以用map方法隐式遍历执行删除,不需要写显式for循环:

# 建议先把xpath查询范围限定在malay节点下,避免误删其他位置的holidays节点
malay_holiday_nodes = malay_node.xpath('.//*[local-name()="holidays"]')
list(map(malay_node.remove, malay_holiday_nodes))

注意:你提供的示例XML存在标签拼写错误,开始标签为<maylay>,闭合标签为</malay>,解析前请修正为一致的拼写,否则会触发XML语法错误。

内容的提问来源于stack exchange,提问作者Tristan Tran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:42:00