2015-10-15 93 views
3

我有一个xml,它具有许多与不同标签不同的节点,但具有相同的属性。是否有可能找到所有这些节点?通过属性使用Python查找ElementTree中的所有元素

我知道,这是可以通过属性来查找所有节点,如果他们都具有相同的标签:

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

但对我来说,他们都有不同的标签。像这样的东西是不工作:

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

回答

3

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

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

旁注:

作为一个人,如果你真的使用lxml(不只是意外地用标记问题),我会建议使用xpath()方法而不是findall()。前者具有更好的XPath支持。例如,当你需要找到一套有限的名字的元素,说foobar,您可以使用下面的XPath表达式与xpath()方法:

root.xpath("//*[self::foo or self::bar][@attrib]") 

当传递给findall()上述同样的表达会导致错误:

SyntaxError: prefix 'self' not found in prefix map