#!/perl/bin/perl
#Practise shim form of xml parsing.
package ShimPractise;
use strict;
use XML::Parser;
sub new ($$$)
{
my $shimClass = $_[0];
my $shimData = {
name => $_[1],
number => $_[2],
xmlAsScalar => $_[3],
};
bless ($shimData, $shimClass);
return $shimData;
}
sub parse()
{
my ($currentObject) = @_;
my $parser = new XMLParser(Handlers
=> { Init => sub {$currentObject->handleDocumentInit (@_)},
Start => sub {$currentObject->handleStartTag (@_)},});
$parser->parse($currentObject->{xmlAsScalar});
my $returnString = "";
my $numTags = $currentObject->getNumber();
$returnString .= "Number of Tags: ".$numTags."
\n";
my $tags = $currentObject->getName();
$returnString .= $tags."
\n";
return $returnString;
}
sub setName($)
{
$_[0]->{name} = $_[1];
}
sub setNumber($)
{
$_[0]->{number} = $_[1];
}
sub getName()
{
return $_[0]->{name};
}
sub getNumber()
{
return $_[0]->{number};
}
sub handleDocumentInit()
{
my ($currentObject, $expat) = @_;
$currentObject->setName("Tags: ");
$currentObject->setNumber(0);
}
sub handleStartTag()
{
my ($currentObject, $expat, $element, %attrList) = @_;
my $currentName = $currentObject->getName();
my $currentNumber = $currentObject->getNumber();
$currentObject->setName($currentName." ".$element);
$currentObject->setNumber($currentNumber + 1);
}
1;
####
my $shimmer = new ShimPractise("name", 0, "");
my $shimString = $shimmer->parse();