Pages

2009-11-03

Read XML file, set a node value by XPATH and save the XML file w/ Perl


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