Well done, poj, I find these scripts elegant. The ultimate one sidesteps values that perl thinks has zero length and is not too complex in its map/grep behavior that an intermediate learner can't reason through it.
$ pt 2.xml_writer.pl
$ ./2.xml_writer.pl
OS=linux Perl=v5.26.1 XML::Writer=0.625
<Contact Type="Information" Phone="13824898944" Email="abctest@abc.com
+">I am here to ask questions</Contact>
----------
<Contact Phone="0" Type="Information" Email="tja@greeninterweb">
----------
<Contact Email="tja@greeninterweb" Type="Intfermation">Phone is so las
+t millenium</Contact>
$ cat 2.xml_writer.pl
#!/usr/bin/perl -w
use 5.011;
use XML::Writer;
printf "OS=%s Perl=%s XML::Writer=%s\n", $^O, $^V, $XML::Writer::VERSI
+ON;
my $writer = XML::Writer->new();
my $cContactPhone = 13824898944;
my $cContactEmail = 'abctest@abc.com';
$writer->startTag(
"Contact",
"Type" => "Information",
"Phone" => $cContactPhone,
"Email" => $cContactEmail
);
$writer->characters('I am here to ask questions');
$writer->endTag("Contact");
print "\n----------\n";
my $writer2 = XML::Writer->new();
my %obj = (
Type => 'Information',
Phone => 0,
Email => 'tja@greeninterweb',
);
my %attr = map { $_ => $obj{$_} }
grep { length $obj{$_} } keys %obj;
$writer2->startTag( "Contact", %attr );
print "\n----------\n";
my $writer3 = XML::Writer->new();
%obj = (
Type => 'Intfermation',
Phone => '',
Email => 'tja@greeninterweb',
);
%attr = map { $_ => $obj{$_} }
grep { length $obj{$_} } keys %obj;
$writer3->startTag( "Contact", %attr );
$writer3->characters('Phone is so last millenium');
$writer3->endTag("Contact");
print "\n";
__END__
$
What applications would this have? It seems like xml is everywhere now that I'm looking at it, even the walls of the monastery! |