Использование ElementTree для поиска узла - неверный предикат - PullRequest
3 голосов
/ 08 марта 2019

Я очень новичок в этой области, поэтому я уверен, что это просто нечто очевидное. Я пытаюсь изменить скрипт python, чтобы он находил узел другим способом, но я получаю ошибку «неверный предикат».

import xml.etree.ElementTree as ET

tree = ET.parse("/tmp/failing.xml")
doc = tree.getroot()
thingy = doc.find(".//File/Diag[@id='53']")
print(thingy.attrib)
thingy = doc.find(".//File/Diag[BaseName = 'HTTPHeaders']")
print(thingy.attrib)

Это должно найти один и тот же узел дважды, но вторая находка получает ошибку. Вот выдержка из XML:

<Diag id="53">
            <Formatted>xyz</Formatted>
            <BaseName>HTTPHeaders</BaseName>
            <Column>17</Column>

Надеюсь, я не слишком много урезал. По сути, поиск с помощью «@id» работает, но вместо этого я хочу выполнить поиск по этому тегу BaseName.

На самом деле я хочу выполнить поиск по комбинации тегов, чтобы у меня сложилось более сложное выражение, но я не могу заставить работать простое!

1 Ответ

2 голосов
/ 08 марта 2019

Код в вопросе работает при использовании Python 3.7. Если пробелы до и после знака равенства в предикате удаляются, это также работает с более ранними версиями Python.

thingy = doc.find(".//File/Diag[BaseName='HTTPHeaders']")

См. https://bugs.python.org/issue31648.

...