1

で HTML ファイルを解析していますHTML::TokeParser::Simple。HTML ファイルには、以下に示す内容が含まれています。私の問題は、JavaScript がテキスト コンテンツとして表示されないように無視しようとしていることです。例:

use HTML::TokeParser::Simple;
my $p = HTML::TokeParser::Simple->new( 'test.html' );

while ( my $token = $p->get_token ) {
    next unless $token->is_text;
    print $token->as_is, "\n";
}

これにより、次のような出力が出力されます。

Test HTML

<!--
  var form_submitted = 0;

  function submit_form() {
    [..]
  }
 //-->

実際の HTML ドキュメント コンテンツ:

<html>
<span>Test HTML</span>
<script type="text/javascript">
<!--
  var form_submitted = 0;

  function submit_form() {
    [..]
  }
 //-->
</script>
</html>

JavaScriptタグの内容が表示されないようにするにはどうすればよいですか。

4

3 に答える 3

1

望ましい結果が得られます。私が持っているバージョンでは、コメントは (正しく) テキストとは見なされません。使用しているモジュールをアップグレードする必要があるようです。(HTML::Parser 3.69 と HTML::TokeParser::Simple 3.15 を使用しました。)

>perl a.pl
Test HTML



>

HTML エンティティを処理し、テキストを有効にフォーマットする必要があります。後者は、すべてのフォーマット命令を削除したため、非常に困難です。あなたのアプローチには致命的な欠陥があるようです。

于 2013-09-13T19:18:53.123 に答える
0

メソッドを使用するだけでよいと思いますas_text

    my $tree = HTML::TreeBuilder->new();
    $tree->parse( $html );
    $tree->eof();
    $tree->elementify(); # just for safety
    my $text = $tree->as_text();
    $tree->delete;

これは、役立つ便利なメソッドがたくさんあるWWW::Mechanize モジュール ( http://search.cpan.org/dist/WWW-Mechanize/ ) から採用しました。基本的に、オブジェクト内の Web ブラウザーとして機能します。

于 2013-09-14T01:24:04.377 に答える
0

トークンをスキャンして、スクリプトの開始タグと終了タグをすべて無視します。問題を解決するために使用される以下を参照してください。

   my $ignore=0;

   while ( my $token = $p->get_token ) {

      if ( $token->is_start_tag('script') ) {
         print $token->as_is, "\n";
         $ignore = 1;
         next;
      }
      if ( $token->is_end_tag('script') ) {
         $ignore = 0;
         print $token->as_is, "\n";
         next;
      }
      if ($ignore) {
         #Everything inside the script tag. Here you can ignore or print as is
         print $token->as_is, "\n";
      }
      else
      {  
          #Everything excluding scripts falls here handle as appropriate
          next unless $token->is_text;
          print $token->as_is, "\n";
      }
    }
于 2013-09-16T13:03:42.537 に答える