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

如何用xml.etree.ElementTree提取XML属性?值获取错误求助

问题分析与解决

你遇到的问题根源很清晰:你错误地把destinationmilestone元素的key属性值同时当成了字典的键和值,但实际上你想要的值是该元素包裹的文本内容(也就是event3、event4),而非属性本身。

具体错误点

在你的循环逻辑里:

value = destinationmilestone.attrib['key']

这行代码取的是destinationmilestone标签的key属性值(比如milestone1),但你真正需要的是标签内部的文本内容,应该用destinationmilestone.text来获取。另外注意你的XML里最后一个destinationmilestone标签后面多了个多余的.,可以用strip()来清理这类无关字符。

修改后的代码

import xml.etree.ElementTree as ET
tree = ET.parse('seed.xml')
root = tree.getroot()
destination_milestone_event_dict={}
events = []
radar_event = 'event1'
for milestone in root.findall('milestone'):
    if milestone.get('name') == 'Internal Tools - milestone4':
        seed_cloning = milestone.find('seed_cloning')
        if seed_cloning != None:
            events = seed_cloning.find('events').text.split(',')
            if radar_event in events:
                destinationmilestones = seed_cloning.findall('destinationmilestone')
                for destinationmilestone in destinationmilestones:
                    key = destinationmilestone.get('key')
                    print(key)
                    # 改为获取元素文本内容,并清理多余字符
                    value = destinationmilestone.text.strip()
                    print(value)
                    destination_milestone_event_dict[key] = value
                print(destination_milestone_event_dict)

验证输出

修改后运行代码,就能得到你预期的结果:

milestone1
event3
milestone2
event4
{'milestone1': 'event3', 'milestone2': 'event4'}

额外小提示

  • 获取XML元素的文本内容用.text属性;获取属性值用.attrib['属性名']或.get('属性名')(后者更安全,能避免属性不存在时抛出异常)。
  • 处理XML文本时,建议用strip()清理可能存在的空格、换行或多余符号(比如你XML里的那个.)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:32:50