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.