我有一个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
属性。
答案 0 :(得分:6)
*
".//*[@phrase]"
作为标记名称