XML-Parser-YahooRESTGeocode

 view release on metacpan or  search on metacpan

YahooRESTGeocode.pm  view on Meta::CPAN

		}
	}
    
}




## Start ##########################################
sub Start {
	my ($expat, $element, %p) = @_;
    push (@{$expat->{'Curlist'}}, {
        '_name'			=> $element,
        '_attributes'	=> \%p
    });
}




## Char ###########################################
sub Char {
    my ($expat, $data) = @_;
    unless ($data =~/^\s+$/){
        $expat->{'Curlist'}->[$#{$expat->{'Curlist'}}]->{'_data'} .= $data;
    }
}




## Final ##########################################
sub Final {
	my $expat = shift;
	#handle error
	if ($expat->{'errstr'}){ $XML::Parser::errstr = $expat->{'errstr'}; return (undef); }
	#handle advisory messages
	if ($expat->{'errmsg'}){ $XML::Parser::errmsg = $expat->{'errmsg'}; }
	#clean up
	delete $expat->{Curlist};
	my $out = $expat->{Lists}->{'DATA'};
	delete $expat->{Lists};
	return ($out);
}


## gather_data ####################################
sub gather_data {
    my ($expat, $name) = @_;
    my (@data) = ();
    while ($expat->{'Curlist'}->[$#{$expat->{'Curlist'}}]->{'_name'} ne $name){
        push (@data, pop(@{$expat->{'Curlist'}}));
    };
   #one more to catch the start tag
    push (@data, pop(@{$expat->{'Curlist'}}));
    reverse (@data);
    return (\@data);
}


## extract_pcdata #################################
sub extract_pcdata {
    my $data = shift();
    my %out = ();
    foreach (@{$data}){
        foreach my $f (@_){
            if (($_->{'_name'} eq $f) && ($_->{'_data'} !~/^$/)){
                $out{$f} = $_->{'_data'};
            }
        }
    }
    return (\%out);
}


## End ############################################
sub End { 
	my ($expat, $element) = @_;
	
	if (exists($node_tree{$element})){
	
		my $data = extract_pcdata(gather_data($expat, $element), @{$node_tree{$element}});
		push (@{$expat->{'Lists'}->{'DATA'}->{$element}}, $data);
		
		#if the user defined some callback to execute, do that
		if (exists($expat->{'_YahooREST_callbacks'}->{$element})){
			&{$expat->{'_YahooREST_callbacks'}->{$element}}($data);
		}
	
	}
}

## True ###########################################
1;



( run in 1.071 second using v1.01-cache-2.11-cpan-39bf76dae61 )