¿Cómo encontrar recursivamente para una etiqueta de XML usando LXML?

            

Usando lxml es posible encontrar recursivamente para la etiqueta “f1”? Intenté encontrar todos los métodos pero solo funciona para niños inmediatos.

Creo que debería ir por BeautifulSoup para esto!

Puedes usar XPath para buscar recursivamente:

 >>> from lxml import etree >>> q = etree.fromstring('ab') >>> q.findall('hello') # Tag name, first level only. [] >>> q.findall('.//hello') # XPath, recursive. [, ] 

iterfind() itera sobre todos los elementos que coinciden con la expresión de ruta

findall() devuelve una lista de elementos coincidentes

find() devuelve eficientemente solo la primera partida

findtext() devuelve el contenido .text de la primera coincidencia

Ejemplos ilustrativos:

 >>> root = etree.XML("aText") #Find a child of an Element: >>> print(root.find("b")) None >>> print(root.find("a").tag) a #Find an Element anywhere in the tree: >>> print(root.find(".//b").tag) b >>> [ b.tag for b in root.iterfind(".//b") ] ['b', 'b'] #Find Elements with a certain attribute: >>> print(root.findall(".//a[@x]")[0].tag) a >>> print(root.findall(".//a[@y]")) [] 

Referencia: http://lxml.de/tutorial.html#elementpath

(Esta respuesta es relevante selección selectiva del contenido en este enlace)