1.5.7 XXX Ltd REG DDDD Timbuctu 000 1111 abc XXX XXX XXX 0.00 5.05 YYY 7.0000 72.1168 5.05 77.17 XXX XXX 77.17 XXXX Cash Payment received on or after YYY WWWW ZZZZ MR SAMPLE_CUST GROSS AVENUE 1 #9999-9999 Timbuctu XXXX Market Summary 72.1168 MR SAMPLE_CUST_ XXX 10.0000 42.0968 20.0200 0.0000 0.0000 72.1168 0 GGG 999999 MR SAMPLE_CUST 72.1168 XXX GGG G GGG800 10.0000 GGG 10.0000 G GGG800 13.0968 9999-10-01 9999-10-14 G GGG800 29.0000 9999-10-15 9999-11-14 Charges 42.0968 purchase1 G purchase1 10.020 Purchase2 G Purchase2 10.000 G 1633 XXX XXX purchase1 2 Unit 10.0200 G 1633 XXX XXX Purchase2 1 Unit(s) 10.0000 Charges 9999-01-01 to 9999-01-31 20.0200 purchase1 purchase1 Sub-Total for Purchase Details 20.0200 G 9999-10-04 10.0000 G 9999-10-04 0.0200 G 9999-10-02 10.0000 1 77.17 1 #### use strict; use warnings; use XML::Parser; use Data::Dumper; use List::Util qw(max); my $file_name; my @file_name1; my $fp1; my $xml_string; my $pkg_txt; my $got_ebook=0; my $call_grp_info = 0; my $CallDetailByService_cntr=0; my $output_file_fp; sub handle_end_xcd { my ( $expat, $element, %attrs ) = @_; my $line = $expat->current_line; my @parent_item_array=$expat->context; my $parent_tag=$parent_item_array[-1]; print $output_file_fp " IN END Element Found $element\n"; if ($element eq 'CallGroupInfo') { if ($got_ebook == 1) { print STDOUT "$xml_string\n"; } } else { print STDOUT "$xml_string\n"; } } sub handle_start_xcd { my ( $expat, $element, %attrs ) = @_; my $line = $expat->current_line; my @parent_item_array=$expat->context; my $parent_tag=$parent_item_array[-1]; if ( ($element eq 'CallGroupInfo') && ($got_ebook > 1 ) ) { $call_grp_info++; print $output_file_fp "in IF $call_grp_info\n"; if ($call_grp_info == 1) { print STDOUT "$xml_string\n"; } } elsif ($element eq "CallDetailByService") { $CallDetailByService_cntr++; if ($CallDetailByService_cntr > 1) { print STDOUT "$xml_string\n"; } } elsif ($element eq "CallGroupDescription") { print STDERR "XXX\n"; } else { print STDOUT "$xml_string\n"; } } sub char_handler { my ($p, $data) = @_; print $output_file_fp "Char handler", $p->current_element, "\n"; if ($p->current_element eq "SDPackageName") { chomp $data; # print STDERR "Package Data is:$data\n"; $got_ebook++ if ( ($data eq "eMagazine Purchase") || ($data eq "eBook Purchase") ) ; print STDOUT "$xml_string\n"; } else { print STDOUT "$xml_string\n"; } } # End char_handler @file_name1=glob("org1.xml"); my $output_file_name="test.xml"; open ($output_file_fp,">", $output_file_name); my $p1 = XML::Parser->new ( Handlers => { Start => \&handle_start_xcd, Char => \&char_handler, End => \&handle_end_xcd } ) ; foreach (@file_name1) { $file_name = $_; chomp $file_name; open($fp1,"<",$file_name); while(<$fp1>) { chomp; $xml_string=$_; #print $output_file_fp "$xml_string"; chomp $xml_string; if ( grep ( /SDPackageName/, $xml_string) || grep ( /CallGroupInfo/ ,$xml_string) || grep ( /CallDetailByService/ ,$xml_string ) || grep ( /CallGroupDescription/ ,$xml_string )) { $p1->parse($xml_string); } else { print STDOUT "$xml_string\n"; } } } #### no element found at line 1, column 51, byte 51 at D:/Dwimperl/perl/vendor/lib/XML/Parser.pm line 187