As posted your script returns:
Global symbol "$node_c" requires explicit package name (did you forget
+ to declare "my $node_c"?) at derp.pl line 13.
Execution of derp.pl aborted due to compilation errors.
Where possible please copy/paste rather than retype code. I've never used XML::LibXML (at least not that I can remember at this time of day), but believe your example should look something like this:
use strict;
use warnings;
use XML::LibXML;
print "Please specify node c content\n";
my $node_c = <STDIN>;
chomp $node_c;
my $template = "xx.xml";
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($template);
my($object0) = $doc->findnodes("/header/id/c/text()");
$object0->setData( $node_c );
print $doc;
Output:
Please specify node c content
derp
<?xml version="1.0"?>
<header>
<id x_id="1">
<a/>
<b/>
<c>derp</c>
</id>
</header>
Update: Correct use of XML::LibXML here
Or using Mojo::DOM:
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use Mojo::DOM;
my $xml = '<header>
<id x_id="1">
<a></a>
<b></b>
<c>NA</c>
</id>
</header>';
my $dom = Mojo::DOM->new->xml(1)->parse( $xml );
say 'Current value of c: ' . $dom->at('id > c')->text;
say 'Please specify node c content: ';
chomp( my $node_c = <STDIN> );
$dom->at('id > c')->content( $node_c );
say $dom->content;
Output:
Current value of c: NA
Please specify node c content:
derp
<header>
<id x_id="1">
<a />
<b />
<c>derp</c>
</id>
</header>