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

如何用Python xml.etree.ElementTree提取XML指定ID对应的值

提取XML中指定ObjectType下的特征值到字典

需求说明

遍历XML中的ObjectHeader标签,当子节点ObjectType/Id的值为1424时,提取ObjectVariant/ObjectValue下Characteristic/Name与PropertyValue/Value的内容,将其存入字典,预期输出格式为:

{"Var1": 10.4, "Var2": 15.6}

XML文件共3万行,且ID 1424仅出现一次。

示例XML片段

<ObjectContext>
    <ObjectHeader>
        <ObjectType>
            <Id>1278</Id>
            <Name>ID_NAME</Name>
        </ObjectType>
        <ObjectVariant>
            <ObjectValue>
                <Characteristic>
                    <Name>Var1</Name>
                    <Description>Something about the name</Description>
                </Characteristic>
                <PropertyValue>
                    <Value>10.6</Value>
                    <Description>Something about the value</Description>
                </PropertyValue>
            </ObjectValue>
        </ObjectVariant>
    </ObjectHeader>
    <ObjectHeader>
        <ObjectType>
            <Id>1424</Id>
            <Name>ID_NAME</Name>
        </ObjectType>
        <ObjectVariant>
            <ObjectValue>
                <Characteristic>
                    <Name>Var1</Name>
                    <Description>Something about the name</Description>
                </Characteristic>
                <PropertyValue>
                    <Value>10.4</Value>
                    <Description>Something about the value</Description>
                </PropertyValue>
            </ObjectValue>
            <ObjectValue>
                <Characteristic>
                    <Name>Var2</Name>
                    <CharacteristicType>Something about the name</CharacteristicType>
                </Characteristic>
                <PropertyValue>
                    <Value>15.6</Value>
                    <Description>Something about the value</Description>
                </PropertyValue>
            </ObjectValue>
        </ObjectVariant>
    </ObjectHeader>
</ObjectContext>

解决方案代码

针对大文件场景,使用Python的xml.etree.ElementTree模块的iterparse方法逐行解析,避免内存溢出:

import xml.etree.ElementTree as ET

result_dict = {}
target_found = False

# 迭代解析XML文件,处理大文件更高效
for event, elem in ET.iterparse('your_xml_file.xml', events=('start', 'end')):
    if event == 'end' and elem.tag == 'ObjectHeader':
        if target_found:
            # 提取当前ObjectHeader下所有ObjectValue的键值对
            for obj_value in elem.findall('.//ObjectValue'):
                char_name = obj_value.find('.//Characteristic/Name').text
                prop_value = float(obj_value.find('.//PropertyValue/Value').text)
                result_dict[char_name] = prop_value
            # 找到目标后立即终止循环(ID1424仅出现一次)
            break
        # 检查当前ObjectHeader的类型ID是否为1424
        type_id = elem.find('.//ObjectType/Id').text
        if type_id == '1424':
            target_found = True
    # 清理已处理元素,释放内存
    elem.clear()

print(result_dict)

代码说明

  • 高效解析:iterparse逐行处理XML,无需加载整个3万行文件到内存,适合大文件场景。
  • 精准匹配:遍历每个ObjectHeader标签结束时,检查其ObjectType/Id是否为目标值1424。
  • 数据提取:找到目标节点后,遍历其下所有ObjectValue,提取特征名称和对应数值并转为浮点数存入字典。
  • 内存优化:每次处理完元素后调用elem.clear(),避免内存占用过高。
  • 提前终止:由于ID1424仅出现一次,处理完目标节点后立即退出循环,提升执行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:21:35