in reply to Compare 2 XML files

The easiest approach is to extract all SSRIDs (and the corresponding data) and all the ids and the corresponding data and then find the intersection of the two arrays.

Replies are listed 'Best First'.
Re^2: Compare 2 XML files
by snehit.ar (Beadle) on Jul 10, 2017 at 10:02 UTC
    For the given example can you please suggest the needfull... I am new to perl so from given forum not able to get any thing ...
Re^2: Compare 2 XML files
by snehit.ar (Beadle) on Jul 10, 2017 at 10:05 UTC
    Also i am not able to retrieve the application id from the node ..

      The first thing would be to actually extract your $ssrids from the XML and print them.

      Then, extract the system IDs from the other XML and print those.

      After you have convinced yourself that you can extract the correct values, apply the hint of how to find matching elements between two lists.

      Maybe you need to take a step back and consider whether/how you can actually extract the data you need.

        #!/usr/bin/env perl use strict; use warnings; use XML::XPath; use Data::Dumper; use List::Compare; my @records; my @eventrecords; my $eventxml = 'events.xml'; my $evenxp = XML::XPath->new(filename => $eventxml); my $evennodeset = $evenxp->findnodes('//event'); foreach my $evennode ($evennodeset->get_nodelist) { my $evenssrid = $evenxp->find("./custom_attribute_list/custom_ +attribute[normalize-space(name)='SLB_SSRID']/value", $evennode); s/^\s+|\s+$//g for $evenssrid; push @eventrecords, {eventid => $evenssrid}; } print Dumper \@eventrecords; my $xml = 'ApplicationList.xml'; my $xp = XML::XPath->new(filename => $xml); #my $nodeset = $xp->findnodes('//application_list'); for ($xp->findnodes('/application_list/application/@id') ) { my $appid = $_->string_value; $appid =~ s/^\s+|\s+$//g; push @records, {appid => $appid}; } print Dumper \@records; #if ( scalar List::Compare->new(\@records, \@eventrecords)->get_in +tersection ) { # print "The arrays are the same"; #print Dumper @eventrecords; #}

        C:\SLB\Dashboard\Perl>perl testperl $VAR1 = [ { 'eventid' => '957' }, { 'eventid' => '2667' }, ]; $VAR1 = [ { 'appid' => '957' }, { 'appid' => '975' } ];

        HOW TO GET ONLY ID PRESENT IN BOTH THE LIST AND NOT ALL THE RECORDS.