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

如何用Python批量移除XML文件中的多余根层级<object>

批量移除XML中的<object>层级的Python实现

实现思路

借助Python标准库xml.etree.ElementTree解析XML文件,遍历目标文件夹下所有XML文件,将<object>节点的子节点直接迁移到<objects>节点下,删除原<object>节点后,重新保存修改后的文件。

完整代码

import os
import xml.etree.ElementTree as ET

def indent(elem, level=0):
    # 给XML元素添加缩进,保证输出格式美观
    i = "\n" + level*"    "
    if len(elem):
        if not elem.text or not elem.text.strip():
            elem.text = i + "    "
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
        for elem in elem:
            indent(elem, level+1)
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
    else:
        if level and (not elem.tail or not elem.tail.strip()):
            elem.tail = i

def process_xml_file(file_path):
    try:
        # 解析XML文件
        tree = ET.parse(file_path)
        root = tree.getroot()  # 获取<objects>根节点

        # 找到所有<object>节点(默认每个文件仅一个)
        object_nodes = root.findall("object")
        for obj_node in object_nodes:
            # 将<object>的子节点全部移到<objects>节点下
            for child in list(obj_node):
                root.append(child)
            # 删除原<object>节点
            root.remove(obj_node)
        
        # 给XML添加缩进,保证格式可读性
        indent(root)
        # 覆盖原文件保存(如需备份,可修改保存路径,比如加后缀"_modified")
        tree.write(file_path, encoding="utf-8", xml_declaration=True)
        print(f"处理完成: {file_path}")
    except Exception as e:
        print(f"处理失败 {file_path}: {str(e)}")

def batch_process_xml(folder_path):
    # 遍历文件夹下所有XML后缀的文件
    for filename in os.listdir(folder_path):
        if filename.lower().endswith(".xml"):
            file_path = os.path.join(folder_path, filename)
            process_xml_file(file_path)

if __name__ == "__main__":
    # 修改为你的XML文件所在文件夹路径
    target_folder = "path/to/your/xml/folder"
    batch_process_xml(target_folder)

使用说明

  1. 把代码里的target_folder替换成你存放XML文件的实际路径。
  2. 运行代码后,所有XML文件会被直接修改;如果需要保留原文件,可修改tree.write的路径,比如写成file_path.replace(".xml", "_modified.xml")。
  3. indent函数用于保证输出的XML有清晰的缩进格式,避免解析后内容杂乱无章。
  4. 若某文件解析出错,会打印错误信息,不影响其他文件的处理流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:15:57