2016-11-14 20 views
2

我有一個XML文件,:Python的ElementTree的 「無效的後裔」 錯誤

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> 

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

我與這個Python代碼解析它

現在我想查找所有具有phrase屬性的元素,所以我嘗試了'.//[@phrase]',但是th en findall()失敗:

SyntaxError: invalid descendant 

我不明白什麼是錯的。如果我使用內置的xml.etree.ElementTree而不是lxml,則會出現相同的錯誤消息。

請注意,'.//'的作品,但返回bar, baz, quux,我不想bar,因爲它沒有phrase屬性。

+2

需要'*''中的短語.//*[@]' – furas

+0

@furas這應該是一個答案 –

回答

3

您需要*作爲標籤名稱".//*[@phrase]"