bcurrens has asked for the wisdom of the Perl Monks concerning the following question:
(<, >, &) are encoded by XML::Writer, however (', ") are not. I need to encode both (', ") and I suspect my current solution is not very good. I have essentially made a placeholder for each character, and, after XML::Writer has rendered the XML I'm running a global search replace so I end of with the desired output.
I should add that if I encode these characters before outputting with XML::Writer I get:
<root> <str1>one<two</str1> <str2>one&two</str2> <str3>two>one</str3> <str4>Caisse D&quot;Eparge</str4> <str5>Caisse D&apos;Eparge</str5> </root>
The desired output is:
<root> <str1>one<two</str1> <str2>one&two</str2> <str3>two>one</str3> <str4>Caisse D"Eparge</str4> <str5>Caisse D'Eparge</str5> </root>
Program
use strict; use warnings; use Cwd; use XML::Writer; use XML::Writer::String; use HTML::Entities; use utf8; use Modern::Perl; my $str1 = qq(one<two); # < (<) my $str2 = qq(one&two); # & (&) my $str3 = qq(two>one); # > (>) my $str4 = qq(Caisse D"Eparge); # " ("); my $str5 = qq(Caisse D'Eparge); # ' ('); $str4 =~ s/\x{22}/\#\#\#doublequote\#\#\#/g; $str5 =~ s/\x{27}/\#\#\#apostrophe\#\#\#/g; say "str4: $str4"; say "str5: $str5"; my $file = cwd() . '/test.xml'; my $BOD = XML::Writer::String->new(); my $Writer = XML::Writer->new( OUTPUT => $BOD, DATA_MODE => 1, DATA_INDENT => 2 ); $Writer->xmlDecl("UTF-8"); $Writer->startTag('root'); $Writer->dataElement('str1', $str1); $Writer->dataElement('str2', $str2); $Writer->dataElement('str3', $str3); $Writer->dataElement('str4', $str4); $Writer->dataElement('str5', $str5); $Writer->endTag('root'); $Writer->end(); my $xml = $BOD->value(); $xml =~ s/\#\#\#doublequote\#\#\#/\"\;/g; $xml =~ s/\#\#\#apostrophe\#\#\#/\&apos\;/g; my $fh = new IO::File "> $file"; if (defined $fh) { print $fh "$xml"; $fh->close; } exit;
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: How to encode apostrophe and quote using XML::Writer?
by LonelyPilgrim (Beadle) on Feb 09, 2016 at 23:28 UTC | |
by jeffa (Bishop) on Feb 10, 2016 at 20:02 UTC |