2010-04-27 9 views

Respuesta

56

Puede utilizar XPath para buscar de forma recursiva:

>>> from lxml import etree 
>>> q = etree.fromstring('<xml><hello>a</hello><x><hello>b</hello></x></xml>') 
>>> q.findall('hello')  # Tag name, first level only. 
[<Element hello at 414a7c8>] 
>>> q.findall('.//hello') # XPath, recursive. 
[<Element hello at 414a7c8>, <Element hello at 414a818>] 
22

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

findall() devuelve una lista de resultados con elementos

find() eficiente devuelve sólo el primer partido

findtext() ret urnas el contenido .text de la primera coincidencia

Ejemplos ilustrativos:

>>> root = etree.XML("<root><a x='123'>aText<b/><c/><b/></a></root>") 
#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 a partir del contenido en este enlace)

Cuestiones relacionadas