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

时间:2017-10-09 09:24:55

标签: 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 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")
    ...

如何正确做到?

2 个答案:

答案 0 :(得分:2)

这是因为errorroot

尝试打印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")
   ...