2014-06-17 54 views
-6

我碰到使用HTML解析器的Perl代碼來了,如同下面這個HTML :: Parser()代碼在Perl中做什麼?

my $p = HTML::Parser->new(text_h => [ sub {$text .= shift}, 
            'dtext']); 

請幫我理解這一點。

+2

你的問題到底是什麼?你想要關於Perl語言及其語法的教程嗎?你對'HTML :: Parser'模塊的具體問題有疑問嗎?或者介於兩者之間? – Biffen

+1

請將標題改爲您的實際問題,以便有類似問題的人可以找到您的問題。 – reinierpost

回答

2

documentation

$p = HTML::Parser->new(api_version => 3, 
         text_h => [ sub {...}, "dtext" ]); 

這將創建與接收的原始文本與一般實體解碼的文本事件處理子程序一個新的解析器對象。

編輯:

use HTML::Parser; 
use LWP::Simple; 
my $html = get "http://perltraining.stonehenge.com"; 
HTML::Parser->new(text_h => [\my @accum, "text"])->parse($html); 
print map $_->[0], @accum; 

另一個

#!/usr/bin/perl -w 
use strict; 
use HTML::Parser; 
my $text; 
my $p = HTML::Parser->new(text_h => [ sub {$text .= shift}, 
            'dtext']); 
$p->parse_file('test.html'); 
print $text; 

其中,當在這樣一個文件中使用:

<html> 
<head> 
<title>Test</title> 
</head> 
<body> 
<h1>Test Stuff</h1> 
<p>This is a test</p> 
<ul> 
<li>this</li> 
<li>is a</li> 
<li>list</li> 
</ul> 
</body> 
</html> 

產生以下輸出:

Test 


Test Stuff 
This is a test 

this 
is a 
list 

這有幫助嗎?

+0

我經歷了這一點,但無法理解它。 你能舉個例子嗎? – RosAng

+0

查看編輯答案。 –

+0

是的,它幫助了很多,所以你的意思是它刪除標籤,並只提取標籤內的文本...? – RosAng