如何用Python的xml.etree.ElementTree删除深层XML指定标签并保存
使用xml.etree.ElementTree删除XML中所有text2元素的简便方法
直接用ElementTree的查找和删除API就能快速搞定,步骤清晰:
完整代码示例
import xml.etree.ElementTree as ET import io # 原始XML内容(已修正标签闭合错误) xml_content = """<?xml version='1.0' encoding='UTF-8'?> <results preview='0'> <meta> <fieldOrder> <field>count</field> </fieldOrder> </meta> <result offset='0'> <field k='count'> <value> <text1>6</text1> <text2>7</text2> <text3>8</text3> </value> </field> </result> </results> """ # 解析XML字符串 root = ET.fromstring(xml_content) # 全局查找所有text2元素(XPath语法适配任意层级) text2_elements = root.findall(".//text2") # 通过父节点删除每个text2元素(避免迭代过程中修改结构导致的问题) for elem in text2_elements: elem.parent.remove(elem) # 将修改后的XML转为带声明的字符串 tree = ET.ElementTree(root) output_buffer = io.BytesIO() tree.write(output_buffer, encoding='UTF-8', xml_declaration=True) final_xml = output_buffer.getvalue().decode('UTF-8') # 输出或保存结果 print(final_xml)
关键说明
- 用
.//text2XPath表达式可以定位所有层级下的text2元素,无需关心它的父节点路径 - 必须通过父节点调用
remove()方法删除子元素,直接操作子元素会触发报错 - 指定
xml_declaration=True可以保留XML声明头,避免输出缺失<?xml...?> - 如果处理本地XML文件,把
ET.fromstring(xml_content)替换为ET.parse("your_file.xml").getroot()即可
运行代码后,输出的XML就是你需要的目标格式,所有<text2>元素都会被移除。
内容的提问来源于stack exchange,提问作者Rocketship
相关产品推荐
相关产品推荐

