DBIx-XML-DataLoader

 view release on metacpan or  search on metacpan

DataLoader/MapIt.pm  view on Meta::CPAN

				for my $att_nodes (@attributes){
					my $att_value=XML::XPath::Node::Attribute::getData($att_nodes);
					my $att_name=XML::XPath::Node::Attribute::getName($att_nodes);
					if($att_name eq "xpath"){$xpath=$att_value;}
					if($att_name eq "toColumn"){$column=$att_value;}
					if($att_name eq "default"){$default=$att_value;}
					if($att_name eq "date"){$date=$att_value;}
										
				} # end for @attributes
push @cols, $column;
push @table_keys, {xpath=>$xpath,col=>$column, default=>$default , date=>$date};

my @element_nodes=XML::XPath::Node::Element::getChildNodes($child_node);
ELEMENT_NODE: for my $element_node (@element_nodes){
my $node_name=XML::XPath::Node::Element::getName($element_node);
			if(($node_name) and (($node_name eq "Handler")or($node_name eq "Sub"))){
	my $subname;
	my $subargs;
	my $subrank;
			 my @attributes= XML::XPath::Node::Element::getAttributes($element_node);
                                for my $att_nodes (@attributes){
                                        my $att_value=XML::XPath::Node::Attribute::getData($att_nodes);
                                        my $att_name=XML::XPath::Node::Attribute::getName($att_nodes);
		         		if($att_name eq "name"){$subname=$att_value;}
		                        if($att_name eq "args"){$subargs=$att_value;}
                		        if($att_name eq "rank"){$subrank=$att_value;}
                                } # end for @attributes
if(!$subrank){$subrank=1;}
$subname=~s/\&/\&/g;
$subname=~s/\"/\"/g;
$subname=~s/\&lt;/\</g;
$subname=~s/\&gt;/\>/g;
if(!$subrank){$subrank=1;}

$handlers->{$column}->{$subrank}={handler=>$subname, args=>$subargs}; 				}
} #end if $node_name eq Handler
} # end ELEMENT_NODE

#$handlers->{$column}=[@ele_handlers];
} #end if Element

push @table_keys,{ columns=>\@cols, keys=>\@keys, dbname=>$dbname, handlers=>$handlers,
xpath=>$base_xpath, parent=>$table_parent, child=>$table_child}; 
$all_tables->{$table}=\@table_keys;
} #end if Table
} # end  for child_node 


push @mapclasses, $thesubs;
push @mapclasses,$data_sources;
push @mapclasses, $rootelement;
push @mapclasses, $all_tables;
push @mapclasses, \@tables;
push @mapclasses, $doc_key;

my $temp="/tmp";

=pod
## just messing around here  disreguard for now
if($filename !~ /\</){
my @fname=split m[/], $filename;
my $file=pop @fname;
my $temp="/tmp/".$file.".map";
open(TMP, ">$temp")||die "could not open temp $temp $@";
use Data::Dumper;
#$Data::Dumper::Purity=1;
#$Data::Dumper::Terse =1;
print TMP Data::Dumper->Dump(\@mapclasses);
}
=cut

return (@mapclasses);
}
############
} # end sub mapclasses
##########################

1;


__END__


=head1  NAME

        DBIx::XML::DataLoader::MapIt

=head1  SYNOPSIS

	use DBIx::XML::DataLoader::MapIt;

	my  @classmap=DBIx::XML::DataLoader::MapIt->mapclasses('map.xml');

=for man or

=for text or

=for html <b>or</b>

	use DBIx::XML::DataLoader::::MapIt;

	my $m=DBIx::XML::DataLoader::MapIt->new();
	my @classmap=$m->mapclasses('map.xml');


=for man or

=for text or

=for html <b>or</b>
	
	use DBIx::XML::DataLoader::MapIt;

	my $m=DBIx::XML::DataLoader::MapIt->new();

	my $map=qq{
	<XMLtoDB>
		<RootElement name="/Users"/> 
		<dbinfo dbuser="user" dbpass="pass" dbsource="dbi:mysql:userdata" name="userdata"/> 
		<Table name="userinfo" dbname="userdata" xpath="./user">
			<KeyColumn name="USER_ID" order="1"/>



( run in 0.711 second using v1.01-cache-2.11-cpan-71847e10f99 )