【问题标题】:How to render xml content in a HTML table using CGI Perl如何使用 CGI Perl 在 HTML 表中呈现 xml 内容
【发布时间】:2016-03-06 15:45:28
【问题描述】:

我正在尝试使用 CGI Perl 在一个简单的 HTML 表中显示 XML 内容(这是一个 SOAP 请求)。但是,XML 内容在内部被截断 表格单元格。任何人都可以提出一个解决方案来正确呈现 XML HTML 页面?

下面是代码:

use strict;

use CGI;
use CGI::Carp qw(fatalsToBrowser);

my $qry = new CGI;

&show_html();


sub show_html {
    $qry->header();
    $qry->start_html(-bgcolor=>'#FFFFFF', -title=>'Rendering XML');
    my $body = &display_page();
    print $body;

    $qry->end_html;
}

sub display_page {

    my $html = qq{
        <table border="1">
        <tr>
            <th> Key </th>
            <th>Value</th>
        </tr>
        <tr>
            <td> SOAP </td>
            <td>POST /Quotation HTTP/1.0 Host: www.demohost Content-Type: text/xml; charset=utf-8 Content-Length: nnn  <?xml version="1.0"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.demourl1/2001/12/soap-envelope" SOAP-ENV:encodingStyle="http://www.demourl2/2001/12/soap-encoding" >     <SOAP-ENV:Body xmlns:m="http://www.demourl3/quotations" >              <m:GetQuotation>          <m:QuotationsName>MiscroSoft</m:QuotationsName>       </m:GetQuotation>                  </SOAP-ENV:Body>      </SOAP-ENV:Envelope>
            </td>
        </tr>
        </table>
    };
    return $html;

}

【问题讨论】:

  • 请不要在调用 Perl 子例程时使用 & 符号 &amp;。自 17 年前发布 Perl v5.5 以来,这一直是不正确的

标签: html xml perl cgi


【解决方案1】:

XML 中充满了 &lt;&amp; 这样的字符,它们在 HTML 中具有特殊的含义。

您需要对它们进行编码。

这通常使用the HTML::Entities module 完成。

use HTML::Entities;
my $html_encoded_string = encode_entities($raw_xml_string);

或者,使用支持 HTML 过滤的模板语言。

例如,在 Template-Toolkit 中,您可以执行以下操作:

<td>[% raw_xml_string | html %]</td>

您还可以使用 CGI.pm 的 HTML 生成函数(就像您在 show_html 中所做的那样,但它们被标记为 HTML Generation functions should no longer be used,所以您真的应该停止show_html 中使用它们。

CGI.pm 文档推荐使用模板方法。

【讨论】:

  • 这是部分工作,仍然很少有字符从 元素中溢出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-24
  • 2015-07-08
  • 1970-01-01
  • 2017-08-14
相关资源
最近更新 更多