【问题标题】:Perl HTML::Strip->parse doesnt ignore  Perl HTML::Strip->parse 不会忽略
【发布时间】:2013-11-20 20:17:32
【问题描述】:

我目前正在使用 perl HTML::Strip 从我的 HTML 文件中提取文本,但是我遇到了 HTML 特定空格(即“ ”)的小问题。由于某种原因 HTML::Strip->parse() 在这种情况下似乎不起作用。我知道我可以稍后运行替换命令。但是我正在检查是否有另一种方法可以通过调整 new() 构造函数来实现这一点?提前致谢

Perl 代码:

my $hs = HTML::Strip->new();
my $line = join('',@htmlSource);
my $clean_text = $hs->parse( $line );
push @processedLines,  grep { /\S/ } split (/\n/,$clean_text);
foreach my $f  ( @processedLines ) {
  print "$f\n";
}

样本输出:

CBD_UnitTest
MtrTempEst
MtrTempEst_Init1 (C1-Coverage: 100.00 %, 1 out of 1 Testcases passed)
LeadLagFilt (C1-Coverage: 100.00 %, 1 out of 1 Testcases failed)
                                        
                                        
AssMechFiltInit (C1-Coverage: 100.00 %, 1 out of 1 Testcases passed)

样本数据集:

<table bgcolor="white" width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td align="center">
            <table width="100%" cellspacing="0" cellpadding="1" bgcolor="white" border="0">
                    <tr bgcolor="#dcdcdc">
                    <td width="1%" bgcolor="white">
                        <img border="0" src="pictures/batch_module_notok.jpg"/>
                    </td>
                    <td colspan="3" width="1%">
                        <font face="tahoma" size="-2" color="black">
                                    CBD_UnitTest
                        </font>
                    </td>
                    <td width="1%">
                    </td>
                    <td width="1%">
                    </td>
                    <td width="1%">
                        <img border="0" src="pictures/batch_check_notok.gif"/>
                    </td>
                </tr>
                    <tr bgcolor="white">
                    <td width="1%" bgcolor="white">
                    </td>
                    <td width="1%" bgcolor="white">
                        <img border="0" src="pictures/batch_module_notok.jpg"/>
                    </td>
                    <td colspan="2">
                        <font face="tahoma" size="-2" color="black">
                                    MtrTempEst
                        </font>
                    </td>
                    <td width="1%">
                    </td>
                    <td width="1%">
                    </td>
                    <td width="1%">
                        <img border="0" src="pictures/batch_check_notok.gif"/>
                    </td>
                </tr>
                    <tr bgcolor="#dcdcdc">
                    <td width="1%" bgcolor="white">
                    </td>
                    <td width="1%" bgcolor="white">
                    </td>
                    <td width="1%" bgcolor="white">
                        <img border="0" src="pictures/batch_ok.jpg"/>
                    </td>
                    <td>
                            <a href="#CBD_UnitTest:MtrTempEst:ts_MtrTempEst_Init1"><font face="tahoma" size="-2" color="black">
                                MtrTempEst_Init1 (C1-Coverage: 100.00 %, 1 out of 1 Testcases passed)
                            </font></a>
                    </td>
                    <td width="1%">
                    </td>
                    <td width="1%">
                    </td>
                    <td width="1%">
                        <img border="0" src="pictures/batch_check_ok.gif"/>
                    </td>
                </tr>
                    <tr bgcolor="#FF0000">
                    <td width="1%" bgcolor="white">
                    </td>
                    <td width="1%" bgcolor="white">
                    </td>
                    <td width="1%" bgcolor="white">
                        <img border="0" src="pictures/batch_notok.jpg"/>
                    </td>
                    <td>
                            <a href="#CBD_UnitTest:MtrTempEst:ts_LeadLagFilt"><font face="tahoma" size="-2" color="white">
                                <b>LeadLagFilt (C1-Coverage: 100.00 %, 1 out of 1 Testcases failed)</b>
                            </font></a>
                    </td>
                    <td width="1%">
            <a name="LeadLagFilt_0"></a>
            &nbsp;                      </td>
                    <td width="1%">
            &nbsp;                      </td>
                    <td width="1%">
                        <img border="0" src="pictures/batch_check_notok.gif"/>
                    </td>
                </tr>
                    <tr bgcolor="#dcdcdc">
                    <td width="1%" bgcolor="white">
                    </td>
                    <td width="1%" bgcolor="white">
                    </td>
                    <td width="1%" bgcolor="white">
                        <img border="0" src="pictures/batch_ok.jpg"/>
                    </td>
                    <td>
                            <a href="#CBD_UnitTest:MtrTempEst:ts_AssMechFiltInit"><font face="tahoma" size="-2" color="black">
                                AssMechFiltInit (C1-Coverage: 100.00 %, 1 out of 1 Testcases passed)
                            </font></a>
                    </td>
                    <td width="1%">
                    </td>
                    <td width="1%">
                    </td>
                    <td width="1%">
                        <img border="0" src="pictures/batch_check_ok.gif"/>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table>

【问题讨论】:

  • 也许你应该更清楚你所说的“它不工作”是什么意思。
  • @TLP 我试图准确地改写我的话。我对细节、代码、数据和我的输出都很清楚。如果您需要更多详细信息,请告诉我。谢谢

标签: html perl html-parsing strip


【解决方案1】:

从上面的 HTML::Entities 链接中找出答案。谢谢@edibleEnergy

use HTML::Strip;
use HTML::Entities;

my $hs = HTML::Strip->new();
my $line = join('',@htmlSource);
_decode_entities($line, { nbsp => "" }, 1);
my $clean_text = $hs->parse( $line );
push @processedLines,  grep { /\S/ } split (/\n/,$clean_text);
foreach my $f  ( @processedLines ) {
  print "$f\n";
}

我知道我们可以在这里只使用简单的替换(即 s/\ //g)但上面的示例无论有无“;”都适用在末尾。请检查@edibleEnergy 答案中提供的链接。

【讨论】:

    【解决方案2】:

    你安装了吗HTML::Entities? docs for HTML::Strip 状态:

    “如果安装了 HTML::Entities,HTML::Strip 只会尝试解码 HTML 实体。”

    【讨论】:

    • HTML::Entities 已安装。但是没有包含在代码中(即我的代码中没有'use HTML::Entities;'),所以看来我必须添加它,您能否粘贴代码sn-p以实现此解决方案。谢谢
    猜你喜欢
    • 2011-11-12
    • 1970-01-01
    • 2011-09-13
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    相关资源
    最近更新 更多