我有一個錯誤「出的內存」在分析大解析大(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