• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1699
  • Last Modified:

perl script to compare two xml files

perl script to compare two xml files

appreciate if someone tell me how to write a perl script to compare two xml files and difference out the mismatched elements into another file
0
vpavan77
Asked:
vpavan77
1 Solution
 
Adam314Commented:
What format do you want the output?

What differences do you care about?
    Same tags, but in different order?
    Tag content?
    Tag attributes?

If you could post 2 sample files, and the sample output, it'll be easier to get what you want.
0
 
oleberCommented:
0
 
vpavan77Author Commented:
Thanks for the inputs... I am adding two xml files for reference

I want to compare these two xml files and diff out to a plain text with the missing keys in the file

For example - In File1.xml there are actually 6 elements(keys) and in the File2.xml there are only 5 elements(keys).  The missing one is <translation lookup="label.registration.enterinfo">  This missing should be printed to another file say "differeences.txt"

Appreciate your quick response
----------
File1.xml
----------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<translations language="ENG_US">
  <translation lookup="label.login">Login</translation>
  <translation lookup="label.cancel">Cancel</translation>
  <translation lookup="label.username">User Name</translation>
  <translation lookup="label.rememberme">Remember Me</translation>
  <translation lookup="label.password">Password</translation>
  <translation lookup="label.registration.enterinfo">Enter your information</translation>
</translations>
-----------------------------------------------------------------------------------------------------------------------------
File2.xml below
------------
<?xml version="1.0" encoding="UTF-8"?>
<translations language="GER_DE">
  <translation lookup="label.login">Anmelden</translation>
  <translation lookup="label.cancel">Abbrechen</translation>
  <translation lookup="label.username">Benutzername</translation>
  <translation lookup="label.rememberme">Speichern</translation>
  <translation lookup="label.password">Passwort</translation>
</translations>
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
Adam314Commented:
I wan't aware of the xmldiff program... will it do what you need?
0
 
vpavan77Author Commented:
I don't have any program on hand and am very new to Perl.  I want a perl script which does the above requirement.  Appreciate if you can help.
0
 
Adam314Commented:

use XML::SemanticCompare;
my $x = XML::SemanticCompare->new;
 
#NOTE: Change the filenames as needed
local $/;
open(my $in, "<file1.xml") or die "File1: $!\n";
my $xml1=<$in>;
close($in);
open($in, "<file2.xml") or die "File2: $!\n";
my $xml2=<$in>;
close($in);
 
 
open(my $out, ">output.txt") or die "Output: $!\n";
# get the diffs
my $diffs_arrayref = $x->diff($control_xml, $test_xml);
print $out @$diffs_arrayref;
close($out);

Open in new window

0
 
vpavan77Author Commented:
Thanks for the code... whe I run the code, I got the following error

Can't locate XML/SemanticCompare.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .)
0
 
Adam314Commented:
You need to install that module.  If using ActiveState perl, then at a prompt:
    ppm install XML-SemanticCompare
0

Featured Post

VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now