2016-11-14 5 views
2

У меня есть файл XML, :Python ElementTree ошибка "Invalid потомок"

<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]', но th ан findall() терпит неудачу:

SyntaxError: invalid descendant 

Я не понимаю, что это неправильно. Такое же сообщение об ошибке появляется, если я использую встроенный xml.etree.ElementTree вместо lxml.

Обратите внимание, что './/' работает, но возвращает bar, baz, quux и я не хочу bar потому что он не имеет атрибута phrase.

+2

вам нужно '*' в './/*[@ фразе]' – furas

+0

@furas, который должен быть ответ –

ответ

3

Вам нужно * как имя тега в ".//*[@phrase]"

Смежные вопросы