1

私がやろうとしていることはとても簡単に聞こえますが、どういうわけか今数時間苦労しているので、正しい方向に向けてください:

次のようなhtmlがあります。

<img src="random.jpg" class="someClass" id="someId" alt="test" />

現在、これをこのコードと一致させることはできません:

my $tp = HTML::TokeParser->new(\$rawHTML) || die "Cant't open: $!";
while (my $token = $tp->get_token){
  my $ttype = shift @{ $token };
  if($ttype eq "S"){
    my($tag, $attr, $attrseq, $rawtxt) = @{ $token };
    if ($tag eq "img"){
      if(($attr->{'class'} eq "someClass")&&($attr->{'id'}eq "someId")){
        my $alttext = $attr->{'alt'};
        print "AltText: $alttext";
        ...
        }
      }        
    }
  }
}

TokeParser は自己完結型のタグ </.../> を無視しているようです。なんで?私はこれに対する解決策を長い間懸命に探してきました.TokeParserまたは他のPerlモジュールで動作させるための助けを本当に感謝しています...

ありがとう!

4

2 に答える 2

2

何も無視しません:

#!/usr/bin/env perl

use strict; use warnings;
use HTML::TokeParser;
use YAML;

my $html = q{<img src="random.jpg" class="someClass" id="someId" alt="test"/>};

my $parser = HTML::TokeParser->new( \$html );

while (my $token = $parser->get_token) {
    print Dump $token;
}

出力:

---
-S
- 画像
- /: /
  代替: テスト
  クラス: someClass
  id: someId
  ソース: random.jpg
-
  - ソース
  - クラス
  - ID
  - 代替
  - /
- '<img src="random.jpg" class="someClass" id="someId" alt="test"/>'

ところで、HTML::TokeParser::Simpleは、より優れたインターフェイスを提供します。

于 2012-05-19T02:02:17.450 に答える
1

と. _ "test"_ その場合は、次のことを試してください。someClasssomeId

use Modern::Perl;
use Web::Query qw();

my $w = Web::Query->new_from_html(<<'HTML');
<img src="random.jpg" class="someClass" id="someId" alt="test" />
HTML

my @altText = $w->find('img[class="someClass"][id="someId"]')->attr('alt');

say @altText;

出力:

test
于 2012-05-19T02:02:08.487 に答える