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

Python遍历XML匹配ID获取姓名时出现KeyError问题求助

问题排查与解决:根据ID从XML中查询人员姓名

需求

实现根据用户输入的ID(id_donne),在XML文件中查找对应<id_guy>标签的记录,输出该人员的姓名。

XML示例

<record><id_guy>1</id_guy><first_name>Homere</first_name><last_name>Latham</last_name></record>

原代码

xml_file = minidom.parse('id_guyy.xml')
id_guys = xml_file.getElementsByTagName('id_guy')

id_donne = int(input ("Please enter the person ID (maximum: 1000) > "))

for d in id_guys :
            if int(d.attributes['id_guy'].value) == id_donne :
                print('first name: ' + d.attributes['first_name'].value)
                print('last name: ' + d.attributes['last_name'].value)
                print('-------')

运行报错

if d.attributes['id_guy'].value == id_donne :
  File "C:\Program Files\Python310\lib\xml\dom\minidom.py", line 555, in __getitem__
 
return self._attrs[attname_or_tuple]

KeyError: 'id_guy'

错误原因

你混淆了XML的标签内容和标签属性:

  • 你的XML里,<id_guy>1</id_guy>是独立的子标签,ID值是标签内的文本;
  • 但代码里用d.attributes['id_guy']去查找,相当于在找类似<id_guy id_guy="1">这种不存在的属性,自然抛出KeyError。
    另外,原代码遍历的是<id_guy>节点,没法直接关联到对应的姓名标签,逻辑本身存在问题。

修正后的代码

from xml.dom import minidom

# 解析XML文件
xml_file = minidom.parse('id_guyy.xml')
# 获取所有人员记录节点(<record>)
records = xml_file.getElementsByTagName('record')

id_donne = int(input("请输入人员ID(最大值:1000)> "))

for record in records:
    # 获取当前记录的ID标签,提取文本内容
    id_tag = record.getElementsByTagName('id_guy')[0]
    current_id = int(id_tag.firstChild.data)
    
    if current_id == id_donne:
        # 提取姓名标签的文本内容
        first_name = record.getElementsByTagName('first_name')[0].firstChild.data
        last_name = record.getElementsByTagName('last_name')[0].firstChild.data
        print(f'名字:{first_name}')
        print(f'姓氏:{last_name}')
        print('-------')
        # 找到匹配项后退出循环,提升效率
        break
else:
    # 循环未触发break,说明没有匹配的ID
    print(f'未找到ID为{id_donne}的人员记录')

关键修正点

  1. 补全minidom模块的导入(原代码遗漏);
  2. 改为遍历<record>节点——这才是每条人员信息的完整容器;
  3. 通过子标签获取内容:用getElementsByTagName找到对应子标签后,用firstChild.data提取标签内的文本;
  4. 增加未找到记录的提示逻辑;
  5. 找到匹配项后立即退出循环,避免不必要的遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:50:35