【问题标题】:Outputting XML to a browser from a Perl CGI script?从 Perl CGI 脚本将 XML 输出到浏览器?
【发布时间】:2011-10-24 07:05:59
【问题描述】:

我有一个在 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'); 有效,但我不知道如何打印正文)。

【问题讨论】:

    标签: xml perl post cgi xmlwriter


    【解决方案1】:

    你可以在不使用 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
    

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

      • 效果很好,谢谢!只需在标题后添加, $output即可!
      猜你喜欢
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 2012-03-10
      • 2023-03-10
      • 2012-11-30
      相关资源
      最近更新 更多