У меня возникли проблемы с использованием библиотеки Python 2.6.5 xml.etree.ElementTree. В частности, если я настрою простой элемент xml, например следующий
>>> import xml.etree.ElementTree as etree
>>> xml = etree.fromstring("<a><b><c>xy</c></b></a>")
у меня нет проблем с библиотекой при доступе к узлам внутренних элементов, например:
>>> etree.tostring(xml.find('b'))
'<b><c>xy</c></b>'
>>> xml.find('b') == None
False
>>> bool(xml.find('b'))
True
Однако я сталкиваюсь со странной логической интерпретацией узлов листовых элементов, см.:
>>> etree.tostring(xml.find('b/c'))
'<c>xy</c>'
>>> xml.find('b/c') == None
False
>>> bool(xml.find('b/c'))
False
Обратите внимание, что в последней команде элемент xml.find('b/c'), который явно не равен None, оценивается как False. Это особенно раздражает, так как я не могу использовать идиому
>>> leaf = xml.find('b/c'):
>>> if leaf:
>>> do_stuff(leaf)
чтобы проверить, существует ли листовой элемент. (Мне нужно явно проверить 'xml.find('b/c') != None'.)
Может кто-нибудь объяснить это (для меня неожиданное) поведение?