#!/usr/bin/env perl use strict; use warnings; use XML::DOM; use XML::DOM::XPath; use XML::SemanticDiff; my ($file1, $file2) = @ARGV; my $doc1 = do { local(*ARGV, $/, $_); @ARGV = $file1; <>; }; my $doc2 = do { local(*ARGV, $/, $_); @ARGV = $file2; <>; }; my $differ = XML::SemanticDiff->new(keepdata => 1,); my @deltas = $differ->compare( $doc1, $doc2 ); my $majorDOMus = XML::DOM::Parser->new(); my ($tree1, $tree2) = map { $majorDOMus->parse($_); } $doc1, $doc2; for my $delta (@deltas) { my $path = $delta->{'context'}; my @nodes; ( push @nodes, $tree1->findnodes($path) ) ? 1 : ( push @nodes, $tree2->findnodes($path) ) ? 1 : print "\nThere is no node at '$path'\n"; if (@nodes) { print "\nNODEVALUE(getNodeValue): ", $_->getNodeValue for @nodes; print "\nNODEVALUE(getData): ", $_->XML::DOM::CharacterData::getData for @nodes; print "\nTOSTRING: ", $_->toString, "\n" for @nodes; } }