in reply to How to encode apostrophe and quote using XML::Writer?

It seems to work for me -- as far as I understand what you're asking. I took your code, commented out your placeholder substitutions, and ran it, and it outputs an XML file with the apostrophes and quotation marks intact. Any proper handling of UTF-8, which XML::Writer supports, ought not to mess with your character encoding. What do you mean that these characters "are not encoded" by XML::Writer? What OS are you running Perl under, and what is the output you are getting?
  • Comment on Re: How to encode apostrophe and quote using XML::Writer?

Replies are listed 'Best First'.
Re^2: How to encode apostrophe and quote using XML::Writer?
by jeffa (Bishop) on Feb 10, 2016 at 20:02 UTC

    "... and it outputs an XML file with the apostrophes and quotation marks intact."

    But the OP wanted the apostrophes and quotation marks encoded into " and &pos; however.

    The source for XML::Writer has this routine defined:

    sub _escapeLiteral { my $data = $_[0]; if ($data =~ /[\&\<\>\"]/) { $data =~ s/\&/\&amp\;/g; $data =~ s/\</\&lt\;/g; $data =~ s/\>/\&gt\;/g; $data =~ s/\"/\&quot\;/g; } return $data; }
    But i am very unclear on how it is being called, if at all.

    Here is the code that i used:

    use strict; use warnings; use XML::Writer; my %hash = ( str1 => 'one<two', str2 => 'one&two', str3 => 'two>one', str4 => 'Caisse D"Eparge', str5 => q(Caisse D'Eparge), ); my $Writer = XML::Writer->new( OUTPUT => 'self', DATA_MODE => 1, DATA_INDENT => 2, ); $Writer->startTag('root'); $Writer->dataElement( $_, $hash{$_} ) for sort keys %hash; $Writer->endTag('root'); $Writer->end(); print $Writer->to_string;
    And the results:
    <root> <str1>one&lt;two</str1> <str2>one&amp;two</str2> <str3>two&gt;one</str3> <str4>Caisse D"Eparge</str4> <str5>Caisse D'Eparge</str5> </root>
    As you can see, the double quote probably should have been encoded but not the single quote. XML::Writer seems very limited in this regard, at the very least, the documentation is unclear on how to customize your usage of the interface (and the code itself is hard to follow).

    I would recommend using another XML module, perhaps even recommend using JSON instead if possible.

    jeffa

    L-LL-L--L-LL-L--L-LL-L--
    -R--R-RR-R--R-RR-R--R-RR
    B--B--B--B--B--B--B--B--
    H---H---H---H---H---H---
    (the triplet paradiddle with high-hat)