in reply to Re^2: XML::Write challenges
in thread XML::Write challenges

If you have many attributes then consider map and grep

#!/usr/bin/perl use strict; use XML::Writer; my $writer = XML::Writer->new(); my %obj = ( Type => 'Information', Phone => 0, Email => '', ); my %attr = map { $_ => $obj{$_} } grep { length $obj{$_} } keys %obj; $writer->startTag("Contact",%attr);
poj

Replies are listed 'Best First'.
Re^4: XML::Write challenges
by Aldebaran (Curate) on Feb 05, 2019 at 20:24 UTC

    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!