我使用Element解析API调用的以下结果。
<response status="success" code="19">
<result total-count="1" count="1">
<users>
<entry name="admin">
<phash>$$$$$</phash>
<permissions>
<role-based>
<superuser>yes</superuser>
</role-based>
</permissions>
</entry>
<entry name="tester">
<permissions>
<role-based>
<superuser>yes</superuser>
</role-based>
</permissions>
<phash>$$$$$</phash>
</entry>
</users>
</result>
我想简单地打印用户名,这是一个条目的属性。我正在使用下面的代码来解析这一点。
def BP01002(ip, apikey):
xpath = "/config/mgt-config/users"
rulequery = {'type': 'config', 'action': 'get', 'key': apikey, 'xpath': xpath}
rrule = requests.get('https://' + ip + '/api', params = rulequery, verify=False)
rresp = ET.fromstring(rrule.text)
user = rresp.findall("./result/users")
print user如果我只是执行一个打印用户,我会得到以下响应,这是我所期望的。
[<Element entry at 6ffff0948c0>, <Element entry at 6ffff094a28>]如果我试图使用user.text或user.attrib打印结果的文本,则会得到以下错误。
AttributeError: 'list' object has no attribute 'text'如何仅提取条目名称文本数据?
发布于 2015-05-20 17:59:42
findall返回一个列表。如果要打印element.text,则需要如下所示
[u.text for u in rresp.findall('users')]但是,这只会在<users>之后打印换行符。我想,你可能想要的是
>>> [e.attrib for e in rresp.findall('users/entry')]
[{'name': 'admin'}, {'name': 'tester'}]为了完成,element.text在文本节点元素的打开和关闭标记中返回文本,如下
<element>sometext</element>或者是"sometext“如果您的元素不是文本节点,它将返回元素与下一个节点之间的换行符或任何内容。
<element>
<child>
</child>
</element>在上面的示例中,对于节点子元素或元素,文本将返回一个换行符。
https://stackoverflow.com/questions/30356939
复制相似问题