2013-04-30 40 views
0

我剛剛使用Perl XML :: SAX,並且遇到觸發的字符事件問題。我試圖用perl解析一個非常大的XML文件。我的目標是獲取每個標籤的內容(我不知道標籤名稱 - 給定任何XML文件,我應該能夠破解記錄模式並返回每個記錄的數據和標籤,如標籤:數據)。Perl XML :: SAX - character()方法錯誤

使用小文件時,一切正常。但是,在大文件上運行時,字符{}會對內容進行部分讀取。減少閱讀的方式沒有特定的模式。有時它是數據的起始少數字符,有時是其最後幾個字符,有時它只是來自實際數據的一個字母。

SAX解析器是:

$myhandler = MyFilter->new(); 
$parser = XML::SAX::ParserFactory->parser(Handler => $myhandler); 
$parser->parse_file($filename); 

而且,我已經寫了我自己的處理程序調用MyFilter和overridding解析器的性格方法。

sub characters { 
my ($self, $element) = @_; 
$globalvar = $element->{Data}; 
print "content is: $globalvar \n"; 
} 

即使這個打印語句,部分時間讀取值。 我也打過電話之前加載Parsesr包的$ parser->解析()爲:

$XML::SAX::ParserPackage = "XML::SAX::ExpatXS"; 

史迪威不起作用。任何人都可以幫我在這裏嗎?提前致謝!

+0

我建議切換到[XML :: LibXML :: Reader](http://p3rl.org/XML::LibXML::Reader)。 – choroba 2013-04-30 13:46:33

回答

0

聽起來像你需要XML :: Filter :: BufferText。

http://search.cpan.org/dist/XML-Filter-BufferText/BufferText.pm

從說明書「悲傷(和編程錯誤)的一個常見原因是,XML解析器不需要提供字符事件一個大塊。他們可以,但不強迫,最不要,這個過濾器做的是把所有角色放入一個單獨的事件中,這是一個不重要但經常重複的任務。「

一旦你安裝了它並且將解決你的部分字符數據問題,它非常容易使用。