Python ElementTree"无效的后代"错误

时间:2016-11-14 05:21:00

标签: python xml elementtree

我有一个XML文件,foo.xml

<foo>
    <bar>
        <baz phrase="hello"/>
    </bar>
    <quux phrase="goodbye"/>
</foo>

我用这个Python代码解析它:

import lxml.etree as ET
# or if you don't have lxml: import xml.etree.ElementTree as ET

doc = ET.parse('foo.xml').getroot()

for elem in doc.findall('*[@phrase]'):
    print(elem)

这让我:

<Element 'quux' at 0x7fa1419a1d18>

现在我想查找具有phrase属性的所有元素,因此我尝试了'.//[@phrase]',但findall()失败了:

SyntaxError: invalid descendant

我不明白什么是错的。如果我使用内置xml.etree.ElementTree代替lxml,则会显示相同的错误消息。

请注意,'.//'有效,但会返回bar, baz, quux但我不想要bar,因为它没有phrase属性。

1 个答案:

答案 0 :(得分:6)

*

中需要".//*[@phrase]"作为标记名称