如何使用Python ElementTree提取XML中符合指定vdid条件的节点并导出
实现方案
你可以通过遍历Infos下的所有Info节点,删除不符合vdid要求的节点即可实现需求,完整代码如下:
import xml.etree.ElementTree as ET # 读取原XML文件 tree = ET.parse("./VD.xml") root = tree.getroot() # 定位到Infos父节点 infos_node = root.find("Infos") # 配置需要保留的vdid,多值可以用集合如{"T74", "T78"} target_vdid = "T74" # 注意:必须先把Info节点转为固定列表再遍历,避免迭代时修改子节点列表导致漏删 for info in list(infos_node.findall("Info")): if info.get("vdid") != target_vdid: infos_node.remove(info) # 美化XML缩进(Python 3.9及以上版本支持,低版本可以自行实现缩进逻辑) ET.indent(tree, space=" ", level=0) # 导出为新XML,指定编码和XML声明符合你的预期格式 tree.write("./filtered_VD.xml", encoding="utf-8", xml_declaration=True)
关键说明
- 遍历前转列表是核心操作:
infos_node.findall("Info")返回的是动态视图,直接遍历过程中删除节点会导致后续节点索引错乱,出现漏删问题。 - 多vdid保留的修改方式:如果需要保留多个vdid,把
target_vdid改为集合target_vdids = {"T74", "T78"},判断条件改为if info.get("vdid") not in target_vdids:即可。 - 低版本Python无
ET.indent的替代方案:可以手动实现缩进函数,或更换为lxml库的etree模块处理美化需求。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

