Если вы хотите использовать стандартную библиотеку ElementTree, а не LXML, вы может использовать итерацию для поиска всех подэлементов с определенным текстовым значением. Например:
import sys
import xml.etree.ElementTree as etree
s = """<root>
<element>A</element>
<element>B</element>
</root>"""
e = etree.fromstring(s)
if sys.version_info < (2, 7):
found = [element for element in e.getiterator() if element.text == 'A']
else:
found = [element for element in e.iter() if element.text == 'A']
print found[0].text # This prints 'A', honestly!
Примечание: Вы можете выполнить некоторые снимание text
значения ваших элементов в списке понимание.
Редактировать Это будет работать на любой глубине вашего дерева XML. Например,
s = """<root>
<element>A</element>
<element><sub>A</sub></element>
</root>"""
found = [element for element in e.getiterator() if element.text == 'A']
for f in found:
print f
напечатает
<Element element at 7f20a882e3f8>
<Element sub at 7f20a882e4d0>
Я выбрал использовать cElementTree над lxml, так как для моей задачи он имеет намного меньшие накладные расходы памяти (память более критична, чем использование ЦП), это был последний бит кода, который мне нужно переместить из lxml – Patrick