Python ElementTree "Invalid descendant" 错误

Python ElementTree "Invalid descendant" error

我有一个 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.

,则会出现相同的错误消息

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

您需要 * 作为 ".//*[@phrase]"

中的标签名称