2011-08-15 2 views
3

私はPerlモジュールHTML::PullParserを使用しています。私は時々ランダムにテキスト要素を(私が言うことができる限り)分割することに気づいた。例えばHTML :: PullParserはランダムにテキスト要素を分割します

、私は

<html> 
... 
<FONT STYLE="font-family:Times New Roman" SIZE="2">THE QUICK BROWN FOX</FONT> 
... 
</html> 

の内容にhtmlファイルtest.htmlそして、私のPerlコードが

my $html = HTML::PullParser->new(file => 'test.html', text => '"T", text'); 
while (my $token = $html->get_token) { 
    print "$$token[1]\n"; 
} 

のようになりますしている場合は、時々、私は戻って

THE QUICK BROWN FOX # correctly parsed 
を取得

しかし、私は得る他の時間

THE QUICK 
BROWN FOX 

ここで、text要素は2つの別々のトークンに解析されます。限界点が異なっているところはまだ他の回で、htmlファイルの他の内容に応じて、私は

THE QUICK BROWN 
FOX 

を取得します。この動作は非常に面倒です。そして、問題を切り分けるために最善を尽くしました。ファイル全体に依存するように見えます(つまり、残りのファイルを削除してその要素のみを残しておけば、それは問題ありません)。しかし、ファイルの残りの部分がこれを引き起こした部分を特定することはできません。誰かが似たような経験を持ち、問題を回避する方法を知っているのだろうか?どうも!!

UPDATE:この誤った動作の発生は、ファイル内の別の場所にあるHTMLコードのセクションにも依存しません。私はそのテキスト要素の前にhtmlコードの2つのセクションを分離することができました - 両方が存在する場合、このエラーが発生します。しかしどちらか一方が存在しなくても、この問題は解消されます...私は絶対に混乱し、悩まされます。

答えて

3

HTML :: PullParserはHTML :: Parserのサブクラスです。 HTML :: Parserにはunbroken_text属性があり、できるだけ早くテキストイベントを吐き出すかどうか、またはテキストが来ないことをパーサーが認識するまでテキストをバッファリングするかどうかを制御します。デフォルトでは、できるだけ早くテキストノードを生成します。 $p->unbroken_text(1)コールでバッファにする必要があります:)

+0

'HTML :: Parser'は' HTML :: Parser'のサブクラスです。 –

+0

@evil otto right;) – hobbs

+0

魔法のように動作します。どうもありがとうございます! – Zhang18

関連する問題