如何使用Python删除XML文件中指定UserName及其关联的全部FeatureId
解决方法
核心思路是直接删除目标用户名对应的整个<FeatureEntitlementDetail>父节点即可,无需单独删除关联的FeatureId,该节点本身就包含了对应用户的所有FeatureId关联数据,删除父节点会同步移除所有子节点内容。
完整实现代码
import xml.etree.ElementTree as ET # 配置参数 xml_path = "替换为你的XML文件路径" target_user = "raj@abc.com" output_path = "修改后的输出文件路径.xml" # 解析XML文件 tree = ET.parse(xml_path) root = tree.getroot() # 定位到用户权限列表父节点 user_list_node = root.find("./CovRDMData/EnabledFeatureListForUsers") # 遍历所有用户权限节点,注意转成list避免遍历过程中修改节点导致的报错 for entitlement in list(user_list_node.findall("./FeatureEntitlementDetail")): user_node = entitlement.find("./UserName") # 匹配到目标用户则删除对应节点 if user_node is not None and user_node.text.strip() == target_user: user_list_node.remove(entitlement) # 如果XML中同一个用户名只出现一次,匹配到后可以直接终止遍历提高效率 break # 美化XML格式(Python 3.9及以上版本支持,低版本可注释该行) ET.indent(tree, space=" ") # 写入修改后的XML,保留XML声明和utf-8编码 tree.write(output_path, encoding="utf-8", xml_declaration=True)
注意事项
- 如果需要批量删除多个用户,可将
target_user改为用户名列表,调整判断逻辑即可,同时删除break语句 - 代码中先将查询到的节点列表转为list再遍历,是为了避免遍历过程中移除节点导致的迭代异常
- 运行代码后输出的XML文件中,目标用户对应的整组权限数据包括所有关联的FeatureId会被完全删除
内容的提问来源于stack exchange,提问作者Ashok Anumula
相关产品推荐
相关产品推荐

