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



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

最新更新