<?xml version="1.0" encoding="UTF-8"?> <policy name="Cur_policy" version="3.2.1"> <policyrules> <Rule Action="allow" Enabled="true" RuleID="F68E32"> <source addr="10.4.5.3" srcport="any"/> <dest addr="199.5.4.3" destport="80"/> </Rule> <Rule Action="allow" Enabled="true" RuleID="78E21D"> <source addr="10.4.0.0-10.4.255.255" srcport="any"/> <dest addr="any" destport="80"/> </Rule> </policyrules> </policy> #### <?xml version="1.0" encoding="UTF-8"?> <policy name="Cur_policy" version="3.2.1"> <Rule Action="allow" Enabled="true" RuleID="F68E32"> <source addr="10.4.5.3" srcport="any"/> <dest addr="199.5.4.3" destport="80"/> </Rule> <Rule Action="allow" Enabled="true" RuleID="78E21D"> <source addr="10.4.0.0-10.4.255.255" srcport="any"/> <dest addr="any" destport="80"/> </Rule> </policy> #### #!/usr/bin/perl use warnings; use strict; use XML::Twig; my ( $in_XML_file, $out_XML_file ) = @ARGV; # create objects my $ref_reader = XML::Twig->new( twig_handlers => { 'policyrules' => \&policyrules_handler, 'Rule' => \&rule_handler } ); $ref_reader->parsefile( $in_XML_file ) or die " $in_XML_file is not parsable\n"; open my $out_fh, '>', $out_XML_file or die " $out_XML_file cannot be written: $!"; $ref_reader->print( $out_fh ); close $out_fh; sub policyrules_handler { my( $t, $elt)= @_; # arguments for all twig_handlers # $elt->delete; } sub rule_handler { my( $t, $elt)= @_; # arguments for all twig_handlers $elt->set_att( 'new_attr' => 'dummyValue' ); }