Perl & XML... Need help.

In the case that there are two cells under one row, I can only read the first cell. If anyone thinks they know how to deal with this please let me know.

XML code:
<Row>
<Cell><Data ss:Type="String">Loved</Data></Cell>
<Cell ss:Index="3"><Data ss:Type="Number">3.0</Data></Cell>
</Row>
<Row>
<Cell ss:MergeAcross="1"><Data ss:Type="String">12-18 months</Data></Cell>
</Row>

Perl code:
use XML::Parser;
$xp=new XML::Parser();
$xp->setHandlers(Start => \&start, End => \&end, Char => \&cdata);
$xp->parsefile("test.xml");
$flag=$hst=$hster=$hsted=0;
$manu=$prod=$image=$desc=$price=$cat=0;
$ctag=0;
sub start(){
my ($p, $name, %attr) = @;
$ctag = lc($name);
}
sub cdata(){
my ($parser, $target, $data) = @
;
if (lc($target) == "cell"){
if (($target=~/\w|\d/) && ($target ne "False") && ($target !~ /#/)){
push @array, $target;
}
}
}
sub end(){
my ($p, $name) = @_;
$ctag = lc($name);
}
foreach $a (@array){
print $a."<br>";
}

OUTPUT:
Loved
12-18 months

You should use the warnings pragam with your script:

use warnings;

I am pretty sure it would have alerted you to this problem:

if (lc($target) == "cell"){

"==" is the wrong operator, maybe you mean to use "eq" instead:

if (lc($target) eq "cell"){

I am pretty sure the way you have it "cell" will be avaluated as 0 (zero)