从Perl CGI脚本将XML输出到浏览器?

时间:2011-08-10 17:02:38

标签: xml perl post cgi xmlwriter

我在Apache服务器上运行了一个perl CGI脚本。除其他外,该脚本应该显示一些从输入生成的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 个答案:

答案 0 :(得分:2)

你可以在不使用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 :(得分:1)

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