在 python3 中读取 XML 节点的可选属性

问题描述 投票:0回答:1

我正在尝试在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 的示例

谢谢你

python-3.x xml element sax
1个回答
0
投票

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')
© www.soinside.com 2019 - 2024. All rights reserved.