使用Python在属性中查找ElementTree中的所有元素

时间:2015-10-15 06:19:52

标签: python python-2.7 lxml elementtree

我有一个xml,它有很多不同的节点和不同的标签,但属性相同。是否有可能找到所有这些节点?

我知道,如果它们都具有相同的标记,则可以按属性查找所有节点:

root.findall(".//tag[@attrib]")

但在我的情况下,他们都有不同的标签。这样的事情不起作用:

root.findall(".//[@attrib]")

1 个答案:

答案 0 :(得分:3)

在XPath中,您可以使用*来引用任何名称的元素,并且可以使用@*来引用任何名称的属性:

root.findall(".//*[@attrib]")

旁注:

首先,如果您真的使用lxml(不只是偶然使用标记了问题),我建议您使用xpath()方法代替{ {1}}。前者有更好的XPath支持。例如,当您需要查找有限名称集的元素(例如findall()foo)时,可以使用以下{/ 1}}方法使用以下XPath表达式:

bar

传递给xpath()时,上面的相同表达式将导致错误:

  

SyntaxError:prefix' self'在前缀地图中找不到