如何使用python中的ElementTree正确检查xml树中的元素?

如何使用python中的ElementTree正确检查xml树中的元素?,python,xml,elementtree,Python,Xml,Elementtree,我有以下xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <error> <displayMessage>Authentication Error</displayMessage> <message>Authentication Error: org.somewhere.auth.AuthenticationException: Invalid use

我有以下xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<error>
    <displayMessage>Authentication Error</displayMessage>
    <message>Authentication Error: org.somewhere.auth.AuthenticationException: Invalid username or password
</message>
    <code>2</code>
</error>
我试图检查元素
身份验证错误
是否存在于
错误
下。但是只要使用下面的代码

import requests
from xml.etree import ElementTree


r = requests.get(....)
root = ElementTree.fromstring(r.text)
print(root.findall('error'))
它返回一个空列表,我不理解。我希望得到一个元素,因为xml中有一个
error
元素

我正准备试试这样的东西

if len(root.findall('error//Authentication Error'))>0:
    print("auth error")
    ...

如何正确操作?

在xmlstring中查找消息标记

r = requests.get(....)
root = ElementTree.fromstring(r.text)

if len([s.text for s in root.findall(".//message") if 'Authentication Error' in s.text ])>0:
   print("auth error")
   ...

在xmlstring中查找消息标记

r = requests.get(....)
root = ElementTree.fromstring(r.text)

if len([s.text for s in root.findall(".//message") if 'Authentication Error' in s.text ])>0:
   print("auth error")
   ...

这是因为
error
root

尝试打印出
根目录

因此,您可以找到
displayMessage
,然后检查其文本:

any(item.text == "Authentication Error" for item in root.findall("displayMessage"))

如果至少有一个
身份验证错误
它将返回
True
,这是因为
错误

尝试打印出
根目录

因此,您可以找到
displayMessage
,然后检查其文本:

any(item.text == "Authentication Error" for item in root.findall("displayMessage"))

如果至少有一个
身份验证错误

它将返回
True
,我认为
findall
不起作用,因为它只查找元素的子元素,而
是根。根本身指向元素错误,如果有多个,你肯定会得到一个解析错误,因为应该有一个根节点。我认为
findall
不起作用,因为它只查找元素的子元素,而
是根。根本身指向元素错误,如果有多个,您肯定会得到一个解析错误,因为应该只有一个根节点