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
相关产品推荐
相关产品推荐

