Я использую ElementTree для сканирования строки XML, извлеченной из текстового файла.ElementTree findtext не находит узлы листа
<root>
<branch_a>
<leaf>foo</leaf>
</branch_a>
<branch_b>
<another_leaf>bar</another_leaf>
</branch_b>
</root>
Когда я разобрать его и попытаться найти узлы листьев, я не получаю никакого результата:
>>> elem_tree = xml.etree.ElementTree.fromstring(xml_string)
>>> leaf_text = elem_tree.findtext('leaf')
>>> leaf_text is None
True
Но когда я траверс дерево, все работает отлично:
>>> elem_tree.findtext('branch_a/leaf')
'foo'
>>> branch = elem_tree.find('branch_a')
>>> branch.findtext('leaf')
'foo'
Есть ли способ проверить ElementTree все дерево для меня? Мои имена ветвей динамичны, лист, который я ищу, может жить под любой веткой.
Я смог сделать это с помощью мини-юмора, но столкнулся с другими ограничениями. Вот что я делал там, для справки (ошибка проверки удалена).
>>> xml_doc = xml.dom.minidom.parseString(xml_string)
>>> leaf_node = xml_doc.getElementsByTagName('leaf')
>>> leaf_node[0].firstChild.nodeValue
'foo'
Это именно то, что мне не хватало. Благодаря! –