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]"
中的标签名称
我有一个 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]"