У меня есть файл 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
.
вам нужно '*' в './/*[@ фразе]' – furas
@furas, который должен быть ответ –