I have this small Perl script that downloads an XML file, parses it using XML::Smart, and copies the contents into a

MySQL database by deleting and recreating a table. This script used to work fine on Centos 5, but recently the disk crashed, and the new drive has Centos 6 on it. The XML file is 21.5MB in size. I know it gets stuck at the point of parsing the file, as the database table is never deleted or created.

use 5.008; use strict; use warnings; use DBI(); use XML::Smart; use Data::Dumper; #for debugging purposes only BEGIN { $| = 1 }; my $location = 'xxxxxx'; my $XML = XML::Smart->new($location.'CategoriesList.xml') or die("Unable to parse CategoriesList.xml: $!");; $XML = $XML->cut_root(); $XML = $XML->cut_root(); $dbh->do("DROP TABLE IF EXISTS ice_categories"); $dbh->do("CREATE TABLE ice_categories ( category_id int(11) not null, parent_cat_id int(11) not null, category_name varchar(100) not null default '', category_description varchar(100) not null default '', category_image varchar(100) not null default '', category_thumb varchar(100) not null default '', KEY (category_id), KEY (parent_cat_id)) CHARACTER SET utf8 COLLATE utf8_unicode_ci;"); my @Categories = @{$XML->{CategoriesList}{Category}}; my $c_categories = 0; foreach my $category (@Categories) { my $cat_name = ucwords($category->{Name}('langid','eq','1')->{Valu +e}); #print $category->{ID} . " => " . $cat_name . "\n"; my $cat_desc = $category->{Description}('langid','eq','1')->{Value +}; $dbh->do("INSERT ice_categories (category_id, parent_cat_id, categor +y_name, category_description, category_image, category_thumb) VALUES (".$category->{ID}.", ".$cat_parent.", ".$dbh->quote($cat +_name).", ".$dbh->quote($cat_desc).", ".$dbh->quote($category->{LowPi +c}).", ".$dbh->quote($category->{ThumbPic}).")"); $c_categories++; } print "$c_categories categories imported.\n"; } 1;
Example of the xml file.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ICECAT-interface SYSTEM "http://data.icecat.biz/dtd/ICECAT-i +nterface_response.dtd"> <ICECAT-interface> <Response Date="Sat Apr 26 14:46:53 2014" ID="13219513" Request_ID= +"1398516412" Status="1"> <CategoriesList> <Category ID="127" LowPic="http://images.icecat.biz/img/low_pic/ +127-563.jpg" Score="9725" Searchable="0" ThumbPic="http://images.icec +at.biz/thumbs/CAT127.jpg" UNCATID="43171520" Visible="0"> <Description ID="548838" Value="Device or stand where you can +rest your mobile or fixed telephone." langid="1"/> <Description ID="8310" Value="" langid="2"/> <Keywords ID="3274" Value="" langid="1"/> <Keywords ID="3275" Value="" langid="2"/> <Keywords ID="3276" Value="" langid="3"/> <Keywords ID="3277" Value="" langid="4"/> <Keywords ID="3278" Value="" langid="5"/> <Name ID="255" Value="telephone rests" langid="1"/> <Name ID="471173" Value="telefoon steunen" langid="2"/> <Name ID="343915" Value="autres téléphones" langid="3"/> <ParentCategory ID="242"> <Names> <Name ID="485" langid="1">networking</Name> <Name ID="471244" langid="2">netwerken</Name> </Names> </ParentCategory> </Category> </CategoriesList>

In reply to Perl XML::Smart Out of memory! error by nasaa

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.