Вывод XML в браузер из сценария Perl CGI? - PullRequest
1 голос
/ 10 августа 2011

У меня запущен Perl CGI-скрипт на сервере Apache. Скрипт, помимо прочего, должен отображать некоторый XML, сгенерированный из ввода. Используя модуль XML :: Writer, я создал строковый скаляр, содержащий правильный XML, но я не могу понять, как отправить его обратно в браузер. В настоящее время моя функция выглядит так:

sub display_xml {
    # input variables here
    my $output = '';
    my $writer = XML::Writer->new(
                   OUTPUT=>\$output,
                   DATA_MODE => 1,
                   DATA_INDENT =>1
    };
    $writer->xmlDecl('UTF-8');
    $writer->startTag('response');
    #omitted for brevity
    $writer->endTag('response');
    $writer->end();
}

Может ли кто-нибудь помочь мне с этим? Печать $output на STDOUT не работает, и я не видел никаких функций в CGI.pm, чтобы сделать это (print $cgi->header('text/xml'); работает, но я не могу понять, как напечатать тело).

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

Вы можете сделать это без использования CGI.

print "Content-Type: text/xml\r\n";   # header tells client you send XML
print "\r\n";                         # empty line is required between headers
                                      #   and body
print $output;                        # the body: XML
1 голос
/ 11 августа 2011

CGI - это относительно простой протокол, который отправляет стандартный вывод вашего скрипта на клиентскую машину. Все, что вам нужно, это поместить заголовок в начало вывода. Это работает для меня:

use CGI qw(:standard);
use XML::Writer;

my $output = '';
my $writer = XML::Writer->new(
    OUTPUT      => \$output,
    DATA_MODE   => 1,
    DATA_INDENT => 1
);
$writer->xmlDecl('UTF-8');
$writer->startTag('response');

#omitted for brevity
$writer->endTag('response');
$writer->end();

print header('text/xml'), $output;

Также убедитесь, что вы поместили строку shebang в начало и сделали сценарий исполняемым, чтобы сервер знал, как его запустить:

#!perl
...