使用ElementTree的findall()来匹配元素的文本

时间:2014-05-13 02:08:30

标签: python elementtree

我尝试使用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']")

任何提示?

1 个答案:

答案 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"]')