我有一个xml,它有很多不同的节点和不同的标签,但属性相同。是否有可能找到所有这些节点?
我知道,如果它们都具有相同的标记,则可以按属性查找所有节点:
root.findall(".//tag[@attrib]")
但在我的情况下,他们都有不同的标签。这样的事情不起作用:
root.findall(".//[@attrib]")
答案 0 :(得分:3)
在XPath中,您可以使用*
来引用任何名称的元素,并且可以使用@*
来引用任何名称的属性:
root.findall(".//*[@attrib]")
旁注:
首先,如果您真的使用lxml
(不只是偶然使用lxml标记了问题),我建议您使用xpath()
方法代替{ {1}}。前者有更好的XPath支持。例如,当您需要查找有限名称集的元素(例如findall()
和foo
)时,可以使用以下{/ 1}}方法使用以下XPath表达式:
bar
传递给xpath()
时,上面的相同表达式将导致错误:
SyntaxError:prefix' self'在前缀地图中找不到