tags:

views:

72

answers:

2

Hi,

Below is the script I have written to change the value of one of the parameter in an XML file situated at a different location:

#!/usr/bin/perl -w

use Cwd;
use XML::Simple;
use Data::Dumper;
no warnings;

my $before_upgrade_value = &pre_upgrade_value;
print "Value before upgrade:: $before_upgrade_value \n";

&change_value ($before_upgrade_value);

&change_value ("America");

my $after_upgrade_value = &pre_upgrade_value;

print "Value after upgrade:: $after_upgrade_value \n";
print "Done \n";

sub pre_upgrade_value {
    my $xml = new XML::Simple;

    # read XML file
    my $input_xml  = "/usr/tmp/country/CountryConfig.xml";

    my $data = $xml->XMLin($input_xml);
    my $arg0 = $data->{COMMON}->{COUNTRY_LIST}->{Value};

    print "Arg0 is $arg0 \n";
    return $arg0;
}

sub change_value {
    my $arg0 = shift;

    my $arg1 = "ENGLAND";

    my $arg2 = "/usr/tmp/country/CountryConfig.xml";

    system("perl -pi -e 's/$arg0/$arg1/' $arg2");
}

But I am getting the following error:

Unable to recognise encoding of this document at /usr/local/lib/perl5/site_perl/5.8.7/XML/SAX/PurePerl/EncodingDetect.pm line 100. Document requires an element [Ln: 1, Col: 0]

Can you tell me the reason as I am not calling EncodingDetect.pm in my code?

+6  A: 

XML::SAX is used by XML::Simple. From the code:

# XML::Simple requires the services of another module that knows how to parse
# XML.  If XML::SAX is installed, the default SAX parser will be used,
# otherwise XML::Parser will be used.

A part of XML::SAX is XML::SAX::PurePerl::EncodingDetect. It sounds like you have some whitespace at the start of your XML, you may find this PerlMonks node helpful.

Chas. Owens
But i am not using XML::SAX. instead I am using XML:Simple
PJ
I have attempted to make it more clear in the answer. By using XML::Simple you are using XML::SAX. XML::Simple is a frontend for XML::SAX (or a different parser if XML::SAX is not installed).
Chas. Owens
A: 

When you use a module, you also use all the modules it uses, and all the modules they use, and ... :)

brian d foy