Python xml.etree移除name标签报TypeError参数类型错误
报错原因定位
- 传参类型错误:
Element.remove()方法要求传入的参数必须是xml.etree.ElementTree.Element类型的节点对象,原代码传入的是item.tag——这是存储标签名的字符串值,直接触发TypeError。 - 逻辑存在偏差:原代码遍历row节点下所有子元素就执行删除,没有做标签名判断,就算修正传参类型,也会把row下的index、price、desc等所有子节点全部删掉,达不到仅删除
<name>标签的需求。
正确实现方案
实现逻辑:精准定位所有<row>节点,找到每个row下标签名为name的子节点对象,执行删除操作后写出文件即可,全程仅使用Python标准库,无需额外安装依赖。
import xml.etree.ElementTree as ET # 加载解析XML文件 tree = ET.parse('/content/sample_data/xyz.xml') root = tree.getroot() # 遍历所有row层级节点 for row_node in root.findall('row'): # 查找当前row下的name标签节点 name_ele = row_node.find('name') # 节点存在时执行删除,避免无对应标签时报错 if name_ele is not None: row_node.remove(name_ele) # 写出处理完成的XML,指定编码避免乱码 tree.write('/content/sample_data/abc.xml', encoding='utf-8', xml_declaration=True)
补充说明:如果实际业务场景中
<name>标签可能出现在XML任意嵌套层级,而非固定为<row>的直接子节点,可以写递归函数遍历全树匹配删除。针对当前提供的样例XML结构,上述代码可以完全满足删除需求,处理后其余标签结构、文本内容都将保持原样。
内容的提问来源于stack exchange,提问作者kiric8494
相关产品推荐
相关产品推荐

