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";
それでもうまくいきません。誰か助けてくれませんか?前もって感謝します!