我试图使用ElementTree的findall()函数来获取具有名称子元素<name>Kepler</name>
的所有<planet>
元素的列表。例如,我只希望在以下xml文件中返回前两个行星:
<planet>
<name>Kepler</name>
</planet>
<planet>
<name>Kepler</name>
</planet>
<planet>
<name>Newton</name>
</planet>
有什么优雅的方法来做到这一点(除了找到所有<planet>
元素并循环它们)?我希望是这样的
root.findall(".//planet/name[text()=='Kepler']")
提示吗?
关闭!在xpath中,以下内容是有效的(在lxml
中测试以确保!)
root.xpath('//planet[name[text()="Kepler"]]')
等价地写成:
root.xpath('//planet[name="Kepler"]')
现在,xml.etree
似乎不喜欢前XPath
表达式(Invalid Predicate
?!),但后者很酷。哦。然后是:
root.findall('.//planet[name="Kepler"]')