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

Python使用BeautifulSoup如何获取含连字符的XML标签文本

问题原因

Python语法规定,标识符(变量名、属性名等)只能由字母、数字、下划线组成,不能包含连字符-。你使用点属性访问写法idi[x].event-id时,Python会将其解析为idi[x].event 减去 id的运算逻辑,自然会抛出未定义变量的错误,无法识别你要访问event-id标签的需求。
你把标签名的连字符换成下划线后,event_id符合Python标识符命名规则,点属性访问可以正常生效,所以能拿到结果。

解决方案

不需要修改原XML文件,两种常用的兼容写法如下:

  • 方法1:通过find()方法指定标签名查询,兼容性最好,所有特殊命名的标签都可以用这种方式获取
    把代码中获取idText的行替换为:
    idText = idi[x].find('event-id').get_text()
    
  • 方法2:通过getattr()动态获取属性
    也可以用Python内置的getattr方法规避标识符命名限制,写法如下:
    idText = getattr(idi[x], 'event-id').get_text()
    

修正后完整可运行代码

from bs4 import BeautifulSoup

dir_path = '20211006085201.xml'

with open(dir_path, encoding='UTF-8') as file:
    contents = file.read()
soup = BeautifulSoup(contents, 'xml')

events = soup.find_all('fullEventUpdate')
print(' \n-------', len(events), 'events calculated on ', dir_path, '--------\n')

idi = soup.find_all('event-reference')

for x in range(0, len(events)):
    idText = idi[x].find('event-id').get_text()
    print(idText)

注:这里额外把文件读取改成了with open的写法,会自动关闭文件句柄,避免资源泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:45:04