DBIx::XML::DataLoader::XMLWriter
use DBIx::XML::DataLoader::XMLWriter;
my $doc=DBIx::XML::DataLoader::XMLWriter->makexml(\%all_data, $doc_root);
or
use DBIx::XML::DataLoader::XMLWriter;
my $w=DBIx::XML::DataLoader::XMLWriter->new();
my $doc=$w->makexml(\%all_data, $doc_root);
XMLWriter is packaged as part of the DBIx::XML::DataLoader module.
XMLWriter.pm will take a referance to a data structure and
output xml based upon the contents of the referanced data.
The data sent to XMLWriter needs to be in the following structure.
XMLWriter expects to get hash referance to a hash that contains
a hash keyed to table names, with each table key's value is a hash
containing a data hash and keys for (parent, xpath, and node);
The data hash will contain all data for a given segment of xml.
The hash is keyed by numbers that are based on the number of iterations
of data contained in the hash. Each number key points to a array of hash which
contain the actual data, item_node, xpath, and a attribute. Only the attribute node is
optional.
use DBIx::XML::DataLoader::XMLWriter;
$rootnode="docroot";
%sample=(
xml_a=>(
data=>(
1=>[{
val='hello',
item_node='first',
xpath=>'./message',
attribute=>undef
},
{
val='world',
item_node='second',
xpath=>'./message',
attribute=>undef
}],
parent=> undef,
xpath=>'./welcome/message',
node=>'welcome'
);
print DBIx::XML::DataLoader::XMLWriter->makexml(\%sample, $doc_root);
or
use DBIx::XML::DataLoader::XMLWriter;
my $w=DBIx::XML::DataLoader::XMLWriter->new();
$rootnode="docroot";
%sample=(
xml_a=>(
data=>(
1=>[{
val='hello',
item_node='first',
xpath=>'./message',
attribute=>undef
},
{
val='world',
item_node='second',
xpath=>'./message',
attribute=>undef
}],
parent=> undef,
xpath=>'./welcome/message',
node=>'welcome'
);
print $w->makexml(\%sample, $doc_root);
<?xml version='1.0' standalone='yes'?>
<!-- document created using XMLWriter 1.0 at Time 11:11:00 Date 11/20/2002 -->
<docroot>
<welcome>
<message>
<first>hello</first>
<second>world</second>
</message>
</welcome>
</docroot>
use DBIx::XML::DataLoader::XMLWriter;
$rootnode="family_tree";
%sample=(
xml_a=>{
data=>{
1=>[{
val=>'Tom',
xpath=>'./first',
item_node=>'first',
attribute=>undef
},
{
val=>'brother',
xpath=>'./type',
item_node=>'type',
attribute=>undef
},
{
val=>'Ann',
xpath=>'parent::maternal/@mother',
node=>'parent::maternal',
attribute=>'mother'
}],
2=>[{
val=>'Chris',
xpath=>'./first',
item_node=>'first',
attribute=>undef
},
{
val=>'brother',
xpath=>'./type',
item_node=>'type',
attribute=>undef
},
{
val=>'Ann',
xpath=>'parent::maternal/@mother',
item_node=>'parent::maternal',
attribute=>'mother'
}
]},
parent=> 'mother',
xpath=>'./family/maternal/sybling',
node=>'sybling'},
mother=>{
data=>{
1=>[{
val=>'Ann',
xpath=>'./maternal/@mother',
item_node=>'maternal',
attribute=>'mother'
},
{
val=>'Shumm',
xpath=>'./maternal/@maiden',
item_node=>'maternal',
attribute=>'maiden'
}]},
parent=> undef,
xpath=>'./family',
node=>'family'}
);
$xmlref=\%sample;
print DBIx::XML::DataLoader::XMLWriter->makexml($xmlref, $rootnode);
<?xml version='1.0' standalone='yes'?>
<!-- document created using XMLWriter at Time 11:14:50 Date 11/22/2002 -->
<family_tree>
<family>
<maternal mother="Ann" maiden="Shumm">
<sybling>
<first>Tom</first>
<type>brother</type>
</sybling>
<sybling>
<first>Chris</first>
<type>brother</type>
</sybling>
</maternal>
</family>
</family_tree>
DBIx::XML::DataLoader::XMLWriter, DBIx::XML::DataLoader::MapIt,  and DBIx::XML::DataLoader::DB,