First, I don't think the code you posted work as you expect.
The the elements of the two arrays (@Name and
@Address must be enclosed between parens. Otherwise,
you will only get the first element of the array.
Secondly, I find a bit cumbersome the way your datas are
divided in two arrays, one for the names and one for the
addresses, unless they are provided to you in this way, I would
suggest you put all the user information in an array (or a
hash), and put all these arrays into a big one (see perldsc
for more infos on data structures.)
Now, about XML::Writer, it tend to agree with Mr. Q&A,
I don't like the File::IO voodoo thing you have to do, so
I prefer just printing the XML to STDOUT.
As for optimizing you XML::Writer code, you could probably use
a loop to go through each element of your structure and
write the proper dataElements for each name and address.
The final code should probably look like the following:
#!usr/bin/perl -w
use strict;
use XML::Writer;
my $writer = new XML::Writer( DATA_MODE => 1, DATA_INDENT => 4 );
my @Name = ("Fred Flintsone", "Barney Rubble");
my @Address = ("111 Rock River Lane", "113 Rock River Lane");
my @flinstones;
for (0 .. $#Name){ push @flinstones, [ $Name[$_], $Address[$_] ] }
# which is the same as :
@flinstones = (
[ 'Fred Finstone', '111, Rock River Lane' ],
[ 'Barney Rubble', '113, Rock River Lane' ],
);
$writer->xmlDecl( "UTF-8", 1 );
$writer->startTag( "Application");
foreach my $character (@flinstones){
$writer->startTag("Customer");
$writer->dataElement("Name", $character->[0] );
$writer->dataElement("Address", $character->[1] );
$writer->endTag("Customer");
}
$writer->endTag("Application");
$writer->end();
__END__
Results:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Application>
<Customer>
<Name>Fred Finstone</Name>
<Address>111, Rock River Lane</Address>
</Customer>
<Customer>
<Name>Barney Rubble</Name>
<Address>113, Rock River Lane</Address>
</Customer>
</Application>
Oh, and I'll probably lowercase the name of all the XML
elements, but that's just me, maybe you can't do that in
your application...
<kbd>--
my $OeufMayo = new PerlMonger::Paris({http => 'paris.mongueurs.net'});</kbd> |