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

Popular posts from this blog

javascript - Karma not able to start PhantomJS on Windows - Error: spawn UNKNOWN -

Nuget pack csproj using nuspec -

c# - Display ASPX Popup control in RowDeleteing Event (ASPX Gridview) -