How to delete a node from XML using XML::Simple in perl -
i need delete node xml using xml::simple
my xml like:
<install> <version > <number>6.0</number> <build>1014445</build> <path>path</path> <kind>native</kind> </version> <version > <number>6.1</number> <build>1025654</build> <path>path</path> <kind>native</kind> </version> </install>
i need delete node matching particular number under version, need delete node number=6.0. updated xml like:-
<install> <version > <number>6.1</number> <build>1025654</build> <path>path</path> <kind>native</kind> </version> </install>
pardon me if question duplicated, new perl.
this solution using xml::twig
. said in comment, xml::simple
module not choice unless have no choice
xml::twig
uses subset of xpath, expression used find required version
element different 1 in xml::libxml
solution
use strict; use warnings; use xml::twig; $twig = xml::twig->new; $twig->parsefile('install.xml'); $number ( $twig->findnodes('/install/version/number[string()="6.0"]') ) { $number->parent->delete; } $twig->set_pretty_print('indented_c'); $twig->print;
output
<install> <version> <number>6.1</number> <build>1025654</build> <path>path</path> <kind>native</kind> </version> </install>
update
if want make program write directly new xml file instead of using command line redirect output, need open
new file , pass file handle print
method call
like this
open $xml_fh, '>', 'install_new.xml' or die $!; $twig->set_pretty_print('indented_c'); $twig->print($xml_fh);
update 2
to specify version number deleted variable interpolate string's value xpath expression
my $filter = '6.0'; $number ( $twig->findnodes(qq{/install/version/number[string()="$filter"]} } { ... }
but best iterate on of number
elements , write explicit comparison, this
use strict; use warnings; use xml::twig; $twig = xml::twig->new; $twig->parsefile('install.xml'); $filter = '6.0'; $number ( $twig->findnodes('/install/version/number') ) { $number->parent->delete if $number->trimmed_text eq $filter; } $twig->set_pretty_print('indented_c'); $twig->print;
Comments
Post a Comment