0

Perl XML::SAX を使用するのは初めてで、トリガーされる文字イベントで問題が発生しました。perl を使用して非常に大きな XML ファイルを解析しようとしています。

私の目標は、各タグのコンテンツを取得することです (タグ名はわかりません。任意の xml ファイルを指定すると、レコード パターンをクラックし、Tag:Data のようなデータとタグを含むすべてのレコードを返すことができるはずです)。

小さなファイルで作業している間は、すべて問題ありません。ただし、大きなファイルで実行する場合、characters{} イベントはコンテンツの部分的な読み取りを行います。読み取りを削減する方法に特定のパターンはありません。データの最初の数文字の場合もあれば、最後の数文字の場合もあれば、実際のデータの 1 文字だけの場合もあります。

Sax パーサーは次のとおりです。

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

そして、MyFilter という独自の Handler を作成し、パーサーの文字メソッドをオーバーライドしました。

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

この print ステートメントでも、値を部分的に読み取ることがあります。$parser->parse() を次のように呼び出す前に、Parsesr パッケージのロードも試みました。

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

それでもうまくいきません。誰か助けてくれませんか?前もって感謝します!

4

1 に答える 1