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

Ser*_*bin 4 python lxml elementtree python-2.7

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

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

root.findall(".//tag[@attrib]")
Run Code Online (Sandbox Code Playgroud)

但就我而言,它们都有不同的标签。像这样的东西不起作用:

root.findall(".//[@attrib]")
Run Code Online (Sandbox Code Playgroud)

har*_*r07 5

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

root.findall(".//*[@attrib]")
Run Code Online (Sandbox Code Playgroud)

旁注:

请注意,如果您确实在使用lxml(不仅仅是意外地用标记了问题),我建议使用xpath()method 而不是findall(). 前者具有更好的 XPath 支持。例如,当您需要查找有限名称集的元素(例如foo和 )时bar,可以将以下 XPath 表达式与xpath()method 结合使用:

root.xpath("//*[self::foo or self::bar][@attrib]")
Run Code Online (Sandbox Code Playgroud)

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

语法错误:在前缀映射中找不到前缀“self”