我正在尝试在Python3中的SAX中读取XML文件,因为在我的宠物项目中,我在inptu中有一个代表一些GTD项目的XML文件的完整目录1.
文件具有这种格式
<project name = "name of project">
<action number="2" > action to do</action>
</project>
我的 SAX 解析位于类 MyHandler 中,我的问题是我已将属性“number”定义为可选,但它不起作用。
在说明中
def startElement(self, tagName, attrs):
#etc
elif tag_name.isAction():
self.priority = attrs['number'] if 'number' in tagName else '0'
我验证当前标签是否是 Action 标签:如果是,我填充类的 self.priority 属性,读取 XML 属性“number”(如果存在),否则我输入“0”。
我的问题是
attrs['number'] 如果 tagName 中有 'number'
在任何情况下都是错误的
如何在 startElement 方法中验证 tagName 是否具有属性“number”?
在 stackoverflow 中我只找到了 Stax 的示例
谢谢你
tagName
没有“拥有”任何东西,它只是一个字符串。
in
运算符检查标签名称内的子字符串 number
。 'number' in 'somenumberthing'
评估为 true。显然这不是你想要的。
attr
具有实际值;您正在寻找的条件是:“如果属性具有键“数字”的值”,例如:
self.priority = attrs['number'] if 'number' in attrs else '0'
这是类似 dict 的对象的一种非常常见的模式,我认为这就是 SAX 为您提供的,所以我建议使用具有默认值的
get
方法:
self.priority = attrs.get('number', default='0')