我有以下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>
我正在尝试检查Authentication Error
下是否存在元素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")
...
如何正确做到?
答案 0 :(得分:2)
这是因为error
是root
。
尝试打印root
:<Element 'error' at 0x7f898462ff98>
。
因此,您可以找到displayMessage
,然后查看其文字:
any(item.text == "Authentication Error" for item in root.findall("displayMessage"))
如果至少有一个True
,它将返回Authentication Error
。
答案 1 :(得分:1)
在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")
...