2013-06-03 45 views

回答

1

不知道XML的膽量::解析器我的建議是使用封閉:

my $filename = "foo.bar"; 
my $start_handler = sub { 
    # ues $filename here 
}; 
$parser = new XML::Parser(ErrorContext => 2, Namespaces => 0); 
$parser->setHandlers(Start => $start_handler); 
+0

這對我來說不太合適,因爲parsefile是遞歸調用的,但是非常接近。謝謝! –

0

笨拙的方式來處理,這是包裹在一個子功能parse_fileparsefile方法(見下文)和存儲文件名在$current_filename(這與gensym's answer類似,但容忍遞歸)。

$parser = new XML::Parser(ErrorContext => 2, Namespaces => 0); 
$parser->setHandlers(Start => \&start_handler); 

$current_filename = ''; 
$previous_filename = ''; 

parse_file($filename); 

sub parse_file { 
    $previous_filename = $current_filename; 
    $current_filename = shift; 
    $parser->parsefile($current_filename); 
    $current_filename = $previous_filename; 
} 

sub start_handler { 
... 
... $current_filename ... 
... 
} 
相關問題