我尝试使用ElementTree的findall()函数来获取名称为子元素<planet>
的所有<name>Kepler</name>
元素的列表。例如,我只想在以下xml文件中返回前两个行星:
<planet>
<name>Kepler</name>
</planet>
<planet>
<name>Kepler</name>
</planet>
<planet>
<name>Newton</name>
</planet>
这是一种优雅的方式(除了查找所有<planet>
元素并循环遍历它们之外)?我希望有像
root.findall(".//planet/name[text()=='Kepler']")
任何提示?
答案 0 :(得分:2)
关闭!在xpath中,以下内容有效(在lxml
中测试以确保!)
root.xpath('//planet[name[text()="Kepler"]]')
等效写的:
root.xpath('//planet[name="Kepler"]')
现在,xml.etree
似乎不喜欢前XPath
表达式(Invalid Predicate
?!),但后者很酷。那好吧。那么我们就有了:
root.findall('.//planet[name="Kepler"]')