Thanks. I guessed that was something I needed to do. One note: when initializing a new XML::Writer object, you can pass $c->res as the OUTPUT, and XML::Writer will do the right thing, apparently, since it has a print method.
Also, sending an empty string to body $c->res->body("") is enough. On 26/11/12 17:54 Francisco Obispo wrote: > Ok, Now that I'm on my computer, I can write a decent response: > > I had a similar problem with generating a fairly large CSV file. > > you don't want to store this in a stash entry because it can get very large, > and > even it you were using a temp file to write the data to, the user > would have to wait until the file is fully written and then > transferred, which could translate to unresponsiveness. > > I decided to use catalyst ->write() method to output directly > to the socket, and generate the CSV on the fly. > > On your example, you could use XML::Writer which allows you to > generate XML on the fly via: > > $c->write( $writer->startTag('hello',(attribute=>'value')) ); > $c->write( $writer->characters('World!') ); > $c->write( $writer->endTag()) ; > > > Will generate to the output buffer: > > <hello attribute='value'>World!</hello> > > You will need to generate a header with the right content type before you > start sending out stuff to your output buffer: > > $c->response->content_type('text/comma-separated-values'); > > $c->res->header( 'Content-Disposition', > qq[attachment; filename=download.csv] ); > > > This is how I generated mine for the CSV, you would have to fill the > right content_type: application/xxx? > > And the name of the file in the Content-Disposition section. > > Notice that you will not provide a Content-Length header, so the > client will not know how much data you will be sending until its > done. > > And catalyst won't know that you actually sent anything so to avoid > Catalyst rendering the template, just set the body to something, in > my case I did: > > $c->response->body(qq{\n}); > > I know there are some methods to tell Catalyst to end instead > of generating the template, but I couldn't get them to work properly. > > > Regards > > > Francisco Obispo > Director of Applications and Services - ISC > email: fobi...@isc.org > Phone: +1 650 423 1374 || INOC-DBA *3557* NOC > PGP KeyID = B38DB1BE > > On Nov 26, 2012, at 8:58 AM, Robert Rothenberg <rob...@gmail.com> wrote: > >> I need to output a large XML file (actually, a KML file of points) from a >> database. >> >> I can't find any documentation for Catalyst::View::XML::Generator, or even >> decent documentation for XML::Generator, on how to do this. >> >> It would appear to expect me to put the entire structure in the stash, which >> I don't want to do, as it could contain thousands of points. >> >> Ideally I would pass an iterator function and it would do the rest. >> >> >> >> >> >> >> _______________________________________________ >> List: Catalyst@lists.scsys.co.uk >> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst >> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ >> Dev site: http://dev.catalyst.perl.org/ > > > _______________________________________________ > List: Catalyst@lists.scsys.co.uk > Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst > Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ > Dev site: http://dev.catalyst.perl.org/ > _______________________________________________ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/