"Nicht genügend Arbeitsspeicher" beim Parsen großer (100 Mb) XML-Dateien mit Perl

8

Ich habe einen Fehler " Nicht genügend Speicher " beim Analysieren einer großen (100 MB) XML-Datei

%Vor%

Was kann ich tun, um dieses Fehlerproblem zu beheben?

    
gangabass 03.09.2011, 14:22
quelle

2 Antworten

18

Die Verarbeitung großer XML-Dateien, die nicht in den Speicher passen, ist XML::Twig bewirbt :

  

Eine der Stärken von XML::Twig ist, dass Sie mit Dateien arbeiten können   die nicht in den Speicher passen (BTW speichert ein XML - Dokument im Speicher als   Baum ist ziemlich speicher teuer, der Expansionsfaktor ist oft   um 10).

     

Um dies zu tun, können Sie Handler definieren, die einmal aufgerufen werden   spezifisches Element wurde vollständig analysiert. In diesen Handlern können Sie   Greife auf das Element zu und bearbeite es so, wie es dir passt (...)

Der Code, der in der Frage gepostet wird, nutzt die Stärke von XML::Twig überhaupt nicht (die Methode simplify macht es nicht viel besser als XML::Simple ).

Was im Code fehlt, sind die " twig_handlers " oder " twig_roots ", die den Parser im Wesentlichen veranlassen, sich effizient auf relevante Teile des XML-Dokuments zu konzentrieren.

Es ist schwierig zu sagen, ohne das XML zu sehen, ob das Dokument Stück für Stück verarbeitet. Chunk oder nur ausgewählte Teile ist der Weg zu gehen, aber entweder sollte man dieses Problem lösen.

Der Code sollte also etwa so aussehen (Chunk-by-Chunk-Demo):

%Vor%     
Zaid 03.09.2011, 19:06
quelle
8

Siehe Abschnitt "XML-Dokumentabschnitt für Abschnitt verarbeiten" von XML::Twig Dokumentation, es wird speziell besprochen, wie das Dokument Teil für Teil verarbeitet wird, was eine große XML-Dateiverarbeitung ermöglicht.

    
bvr 03.09.2011 18:54
quelle

Tags und Links