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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:45:07