0

我是使用 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";

还是不行。有人可以帮我吗?提前致谢!

4

1 回答 1

0

听起来您需要 XML::Filter::BufferText。

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

从描述“悲伤(和程序员错误)的一个常见原因是 XML 解析器不需要在一个块中提供字符事件。他们可以,但不是被迫,而且大多数人都不会。这个过滤器做的很简单但经常重复的任务是将所有角色放入一个事件中。”

安装后非常易于使用,并且可以解决您的部分字符数据问题。

于 2013-05-21T21:48:26.083 回答