我是使用 Perl XML::SAX 的新手,我遇到了触发的字符事件的问题。我正在尝试使用 perl 解析一个非常大的 XML 文件。
我的目标是获取每个标签的内容(我不知道标签名称 - 给定任何 xml 文件,我应该能够破解记录模式并返回每条记录及其数据和标签,如 Tag:Data)。
在处理小文件时,一切正常。但是在大文件上运行时,characters{} 事件会部分读取内容。它减少阅读的方式没有特定的模式。有时它是数据的开头几个字符,有时是最后几个字符,有时它只是实际数据中的一个字母。
Sax 解析器是:
$myhandler = MyFilter->new();
$parser = XML::SAX::ParserFactory->parser(Handler => $myhandler);
$parser->parse_file($filename);
而且,我已经编写了自己的处理程序,称为 MyFilter 并覆盖了解析器的字符方法。
sub characters {
my ($self, $element) = @_;
$globalvar = $element->{Data};
print "content is: $globalvar \n";
}
即使是这个打印语句,有时也会部分读取值。我还尝试在调用 $parser->parse() 之前加载 Parsesr 包:
$XML::SAX::ParserPackage = "XML::SAX::ExpatXS";
还是不行。有人可以帮我吗?提前致谢!