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
Who is Participating?
You need to install that module.  If using ActiveState perl, then at a prompt:
    ppm install XML-SemanticCompare
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.
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

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
<?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>
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>
I wan't aware of the xmldiff program... will it do what you need?
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.

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>;
open($in, "<file2.xml") or die "File2: $!\n";
my $xml2=<$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;

Open in new window

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

Can't locate XML/ in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .)
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.