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

Hi Poj, Thanks
but it looks like I was not clear in my question.
I need to print the both attribute key and value dynamically via XML:Writer. e.g. if $cContactPhone value is blank then the XML should be printed as below.

<Contact Type="Information" Email="abctest@abc.com" Contact Name ="I a +m here to ask questions"</Contact>
if $cContactEmail value is blank then it should print as below
<Contact Type="Information" Phone="13824898944" Contact Name ="I am he +re to ask questions"</Contact>
Thanks

Replies are listed 'Best First'.
Re^3: XML::Write challenges
by holli (Abbot) on Feb 04, 2019 at 08:56 UTC
    If you don't want something to appear in the output, don't tell the module to output it. Basically
    $attributes{"Type"} = $information if $information; $attributes{"Phone"} = $cContactPhone if $cContactPhone; $attributes{"Email"} = $cContactEmail if $cContactEmail; $self->xml->startTag("Contact", %attributes);

    Edit:
    Typo


    holli

    You can lead your users to water, but alas, you cannot drown them.
Re^3: XML::Write challenges
by poj (Abbot) on Feb 04, 2019 at 09:23 UTC

    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

      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!