lxml de Python y método iterparse

Digamos que tengo esta muestra XML.

  text_value1   text_value2   some_text   

Usando el lxml de python, ¿cómo puedo obtener el valor de cada campo para cada conjunto de resultados? Básicamente, quiero repetir cada conjunto de resultados, luego repetir cada campo de ese conjunto de resultados e imprimir los datos de texto.

Esto es lo que tengo hasta ahora:

 context = etree.iterparse(contentBuffer, tag='result') for action, elem in context: print elem.tag, elem.data 

Cualquier ayuda sería muy apreciada.

EDITAR Aquí está el código que se me ocurrió. Parece un poco torpe tener que llamar a getparent () dos veces para leer el atributo del valor de texto correspondiente. ¿Hay una mejor manera de hacer esto?

 for action, elem in context: list = elem.xpath('//text') print "result set:" for item in list: field = item.getparent().getparent().attrib['k'] value = item.text print "\t%s = %s"%(field, value) 

Qué tal si:

 import io import lxml.etree as ET content='''\   text_value1   text_value2   some_text  ''' contentBuffer=io.BytesIO(content) context = ET.iterparse(contentBuffer,tag='result') for action, elem in context: fields=elem.xpath('field/@k') values=elem.xpath('field/value/text/text()') for field,value in zip(fields,values): print('\t{f} = {v}'.format(f=field,v=value)) 

cuyos rendimientos

 field1 = text_value1 field2 = text_value2 field3 = some_text 

Yo sugeriría usar una consulta XPath . Algo a lo largo de r = tree.xpath('//text') debe ser suficiente para sus necesidades.