from py.magic import greenlet import xml.parsers.expat # ____________________________________________________________ def send(arg): greenlet.getcurrent().parent.switch(arg) # 3 handler functions def start_element(name, attrs): send(('start', name, attrs)) def end_element(name): send(('end', name)) def char_data(data): data = data.strip() if data: send(('data', data)) def greenparse(*args): p = xml.parsers.expat.ParserCreate() p.StartElementHandler = start_element p.EndElementHandler = end_element p.CharacterDataHandler = char_data p.Parse(*args) def iterparse(*args): g = greenlet(greenparse) data = g.switch(*args) while data is not None: yield data data = g.switch() # ____________________________________________________________ EXAMPLE = ''' Text goes here More text ''' for data in iterparse(EXAMPLE, 1): print data