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

使用ElementTree提取XML同名标签多实例的分组子元素

XML按实例分组提取子节点实现方案

问题原因

直接使用XPath .//boundary_conditions/rot/rot_instance/parts/name 全局匹配时,会一次性拿到文档中所有符合路径规则的name节点,丢失了节点所属的上层rot_instance关联关系,所以无法区分每个部件属于哪个边界条件实例。

解决逻辑

调整查询顺序,分层处理:

  • 第一步:先匹配所有独立的rot_instance节点,每个节点对应一个边界条件实例
  • 第二步:遍历每个实例节点,在当前节点的上下文范围内,单独提取实例名称、转速、下属部件列表等属性,自然完成数据分组,不会出现跨实例数据混淆

实现代码

import xml.etree.ElementTree as ET

tree = ET.parse('file.xml')
root = tree.getroot()

# 获取所有旋转边界条件实例节点
rot_instance_list = root.findall('.//boundary_conditions/rot/rot_instance')

for instance in rot_instance_list:
    # 提取当前实例的名称
    bc_name = instance.find('name').text
    # 提取当前实例下绑定的所有部件名称
    part_list = [part_node.text for part_node in instance.findall('./parts/name')]
    # 按预期格式输出结果
    print(f"instance_{bc_name} = {part_list}")

运行结果

执行上述代码后将输出完全符合预期的分组结果:

instance_BC_1 = ['rim_FL', 'tire_FL', 'disk_FL', 'center_FL']
instance_BC_2 = ['tire_FR', 'disk_FR']

扩展提示:如果后续需要提取每个实例的转速参数,直接在遍历单个实例时用instance.find('rpm').text即可获取,同样不会出现数据串扰的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:57:25