def clean_arf(input_file_path):
tree = et.parse(input_file_path)
root = tree.getroot()
for monitoredAction in root.xpath('//AgentRecordingFile//MonitoredActions//MonitoredAction'):
application = monitoredAction.find('.//Application')
elementName = monitoredAction.find('.//ElementName')
elementType = monitoredAction.find('.//ElementType')
action = monitoredAction.find('.//Action')
baseUrl = monitoredAction.find('.//BaseURL')
windowTitle = monitoredAction.find('.//WindowTitle')
isRemove = False
# Applying condition 1
if((application.text != None) and (elementName.text != None)):
if (application.text.lower() in ('iexplorer','chrome','msedge') and (elementType.text.lower() == 'client')):
isRemove = True
else:
pass
错误:
AttributeError("'NoneType' object has no attribute 'lower'")
更改此xpath
root.xpath('//AgentRecordingFile//MonitoredActions//MonitoredAction'):
如
root.xpath('//MonitoredActions//MonitoredAction'):
获得最终输出,但同时数据清理没有进行
您的代码正在检查第 17 行中的
application.text != None
和 elementName.text != None
,但在下面一行您正在使用 elementType.text.lower()
,而不测试 elementType.text 是否确实存在。我假设这是一个复制和粘贴问题,并且您实际上想测试第 17 行中的 elementType.text != None
。
顺便说一句,更常见的(“pythonic”)习惯用法是使用
application.text is not None
而不是 application.text != None
,但差异主要是风格上的。此外,您还可以使用这样一个事实:在测试中,None
和空字符串(以及 0 和空列表)被视为 False
。
编写代码的常见方法是:
if application.text and application.text.lower() in ('iexplorer','chrome','msedge') and elementType.text and elementType.text.lower() == 'client':