我有一个错误“出的内存”在分析大解析大(100 MB)的XML文件(100 MB)的XML文件“内存不足”,而用perl
use strict;
use warnings;
use XML::Twig;
my $twig=XML::Twig->new();
my $data = XML::Twig->new
->parsefile("divisionhouserooms-v3.xml")
->simplify(keyattr => []);
my @good_division_numbers = qw(30 31 32 35 38);
foreach my $property (@{ $data->{DivisionHouseRoom}}) {
my $house_code = $property->{HouseCode};
print $house_code, "\n";
my $amount_of_bedrooms = 0;
foreach my $division (@{ $property->{Divisions}->{Division} }) {
next unless grep { $_ eq $division->{DivisionNumber} } @good_division_numbers;
$amount_of_bedrooms += $division->{DivisionQuantity};
}
open my $fh, ">>", "Result.csv" or die $!;
print $fh join("\t", $house_code, $amount_of_bedrooms), "\n";
close $fh;
}
我能做些什么解决这个错误问题?
对于大的XML文件,你应该依靠面向事件的解析器,像SAX。我不知道perl,但是你知道是否有类似的东西吗? –
我不知道这个模块,但在[CPAN](http://search.cpan.org/perldoc?XML::Twig)上有提及如何处理小文件和大文件,你在这里是版本为“小”。所以也许你可能会将代码调整为“巨大”的实现。 – TLP
@Rubens - 请看下面的优秀答案,但简短的版本是“无可挑剔的,Perl有SAX解析器”。 – DVK