use XML::XPath;
use XML::XPath::XMLParser;
# Load XML Structure
my $xml_file_name = 'somewhere/somefile.xml';
my $xp = XML::XPath->new(filename => $xml_file_name);
# Set Value of an XPATH node
my $new_value = “My New Value”;
set_node($xp,'/SomeRoot/SomeChild/SomeTag[@symbol="SomeAttribute"]', $new_value);
# Save modified XML file
my $nodeSet = $xp->find("/");
my $xml_file_content = $nodeSet->get_node(1)->toString;
# Preserve xml entities
$ xml_file_content =~s/&#/&#/g;
# Save file
open(XML,"> $xml_file_name") or die "ERROR: Can't open $xml_file_name \n$!";
print XML $xml_file_name;
close XML;
sub set_node {
my $xp = shift @_;
my $xpath=shift @_;
my $xvalue=shift @_;
my $nodeset = $xp->find($xpath);
foreach my $node ($nodeset->get_nodelist) {
$xp->setNodeText($xpath,$xvalue);
}
}
No comments:
Post a Comment