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/\</\</g;
$subname=~s/\>/\>/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 )