Tengo un error "Fuera de la memoria" al analizar grande (100 Mb) archivo XML"Memoria insuficiente" al analizar el gran archivo XML (100 Mb) usando 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;
}
lo que puedo hacer arreglar este problema de error?
Para archivos grandes XML, debe depender de programas de análisis orientados a eventos, como SAX. No sé perl, pero ¿sabes si hay algo similar? –
No conozco este módulo, pero en [CPAN] (http://search.cpan.org/perldoc?XML::Twig) mencionan cómo manejar archivos pequeños vs enormes, y lo que tiene aquí es el versión para "pequeño". Entonces tal vez puedas adaptar tu código a la implementación "enorme". – TLP
@Rubens - vea debajo respuestas excelentes, pero la versión corta es "Indubitablemente, Perl tiene analizadores SAX". – DVK