nogradi at gmail.com
Tue Apr 11 04:26:49 EDT 2006
> > def outputfilter (filter): > > xmlstring = filter.read() > > doc = lxml.etree.parse(StringIO(xmlstring)) > > doc.xinclude() > > result = str(transformer(doc)) > > filter.write(result) > > filter.close() > > I suspect that these filters will not work in all situations. This is > because > a filter can be called multiple times for a single request and within one > invocation, it is not guaranteed that filter.read() will return all the > data. > > In short, your filter will only work when serving up static files and maybe > only files up to a certain size at that perhaps. It is not likely to work > where > the XML is generated by a content handler. > > This is why the prior posters filters would accumulate data in a list held > in request object until read() returned None and only then process data, > write it out and close the filter off. Indeed I ran into the same problem with my first filter, but this article helped a lot in clarifying how bucket brigades work which I think is the main thing to understand for writing a proper input/output filter: http://perl.apache.org/docs/2.0/user/handlers/filters.html This is on mod_perl but the things about buckets in general are explained quite well.