#!/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();