Si desea utilizar la biblioteca estándar ElementTree, en lugar de lxml, se puede usar la iteración para encontrar todos los subelementos con un valor de texto particular. Por ejemplo:
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!
Nota: es posible que desee realizar alguna extracción del valor text
de sus elementos en la lista por comprensión.
Editar Esto funcionará a cualquier profundidad en su árbol XML. Por ejemplo,
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
imprimirá
<Element element at 7f20a882e3f8>
<Element sub at 7f20a882e4d0>
He elegido usar cElementTree sobre lxml ya que para mi tarea tiene una sobrecarga de memoria mucho menor (la memoria es más crítica que el uso de la CPU), este fue el último código que necesité para pasar de lxml – Patrick