2015-10-15 131 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