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

Python3 SAX解析XML:如何读取节点的可选number属性?

问题修正:Python SAX解析器判断节点属性存在的错误

你的问题核心是判断逻辑的对象用错了:'number' in tagName是在检查标签名(比如action)里是否包含字符串number,这和节点的属性完全无关,所以这个判断永远为false。

正确的判断方式

SAX解析器的startElement方法中,第二个参数attrs是当前节点的属性集合(类似字典的对象),要判断number属性是否存在,应该针对这个集合做判断:

方法1:用in关键字检查属性存在性

def startElement(self, tagName, attrs):
    # 其他逻辑...
    elif tagName.isAction():  # 假设isAction()是判断当前标签为action的方法
        self.priority = attrs['number'] if 'number' in attrs else '0'

方法2:用attrs.get()简化逻辑(推荐)

get方法可以直接指定属性不存在时的默认值,无需额外条件判断,还能避免属性不存在时抛出KeyError:

def startElement(self, tagName, attrs):
    # 其他逻辑...
    elif tagName.isAction():
        self.priority = attrs.get('number', '0')

补充说明

attrs是xml.sax.xmlreader.AttributesImpl类型的对象,支持字典式操作:可以通过键名直接取值、用in判断属性是否存在,也能通过get()方法安全获取带默认值的属性值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:34:52