I thought that may be there is a way to convert it to xml tags, since I need to display a difference in readable format on screen.
Of course there is a way, but you don't specify HOW it should be converted
I'd like to know if there is another way to display difference between two xml files...
Not using XML::SemanticCompare :)
That is the format XML::SemanticCompare uses for comparison of likeness
Its practically xpath, and hey, it is human readable, even if WIDE and vague :) its not meant for producing patches
#!/usr/bin/perl --
use strict;
use warnings;
use XML::SemanticCompare;
my $control = <<'__XML__';
<?xml version="1.0" encoding="UTF-8"?>
<moby:MOBY xmlns:moby="http://www.biomoby.org/moby" xmlns:foobar="http
+://www.biomoby.org/moby2">
<moby:mobyContent>
<moby:mobyData moby:queryID="sip_1_">
<moby:Simple moby:articleName="allele">
<moby:Object moby:id="cho" moby:namespace="DragonDB_Allele"/>
</moby:Simple>
</moby:mobyData>
</moby:mobyContent>
</moby:MOBY>
__XML__
my $test = <<'__XML__';
<?xml version="1.0" encoding="UTF-8"?>
<moby:MOBY xmlns:moby="http://www.biomoby.org/moby" xmlns:foobar="http
+://www.biomoby.org/moby2">
<moby:mobyContent>
<moby:mobyData moby:queryID="sip_1_">
<moby:Simple moby:articleName="allele">
<moby:Object moby:id="cho" moby:namespace="DragonDB_Allele"/>
</moby:Simple>
<moby:Simple moby:articleName="allele2">
<moby:Object moby:id="CHI" moby:namespace="DragonDB_Allele">fo
+o</moby:Object>
</moby:Simple>
</moby:mobyData>
</moby:mobyContent>
</moby:MOBY>
__XML__
my $C = XML::SemanticCompare->new();
my $diffs_arrayref = $C->diff($control, $test) ;
for ( my $ix = 0; $ix < $#$diffs_arrayref; $ix +=2 ){
my $a = $diffs_arrayref->[$ix];
my $b = $diffs_arrayref->[$ix+1];
print
"Old: \n", fart($a),"\n",
"New: \n", fart($b),"\n",
"#" x 33, "\n";
}
sub fart {
local $_ = $_[0];
s{\'\]/}{']\n /}g;
return $_;
}
__END__
Old:
/MOBY[namespace-uri() = 'http://www.biomoby.org/moby']
/mobyContent[namespace-uri() = 'http://www.biomoby.org/moby']
/mobyData[namespace-uri() = 'http://www.biomoby.org/moby']
/Simple[namespace-uri() = 'http://www.biomoby.org/moby']
/
New:
/MOBY[namespace-uri() = 'http://www.biomoby.org/moby']
/mobyContent[namespace-uri() = 'http://www.biomoby.org/moby']
/mobyData[namespace-uri() = 'http://www.biomoby.org/moby']
/Simple[namespace-uri() = 'http://www.biomoby.org/moby']
/@[articleName='allele2' and namespace-uri() = 'http://www.biomoby
+.org/moby']
#################################
Old:
/MOBY[namespace-uri() = 'http://www.biomoby.org/moby']
/mobyContent[namespace-uri() = 'http://www.biomoby.org/moby']
/mobyData[namespace-uri() = 'http://www.biomoby.org/moby']
/Simple[namespace-uri() = 'http://www.biomoby.org/moby']
/Object[namespace-uri() = 'http://www.biomoby.org/moby']
/
New:
/MOBY[namespace-uri() = 'http://www.biomoby.org/moby']
/mobyContent[namespace-uri() = 'http://www.biomoby.org/moby']
/mobyData[namespace-uri() = 'http://www.biomoby.org/moby']
/Simple[namespace-uri() = 'http://www.biomoby.org/moby']
/Object[namespace-uri() = 'http://www.biomoby.org/moby']
/@[namespace='DragonDB_Allele' and namespace-uri() = 'http://www.b
+iomoby.org/moby']
#################################
Old:
/MOBY[namespace-uri() = 'http://www.biomoby.org/moby']
/mobyContent[namespace-uri() = 'http://www.biomoby.org/moby']
/mobyData[namespace-uri() = 'http://www.biomoby.org/moby']
/Simple[namespace-uri() = 'http://www.biomoby.org/moby']
/Object[namespace-uri() = 'http://www.biomoby.org/moby']
/@[id='CHI' and namespace-uri() = 'http://www.biomoby.org/moby']
New:
/MOBY[namespace-uri() = 'http://www.biomoby.org/moby']
/mobyContent[namespace-uri() = 'http://www.biomoby.org/moby']
/mobyData[namespace-uri() = 'http://www.biomoby.org/moby']
/Simple[namespace-uri() = 'http://www.biomoby.org/moby']
/Object[namespace-uri() = 'http://www.biomoby.org/moby']
/text()=foo
#################################
Take a close look at the source, its really not that complicated
Esp see XML::SemanticCompare::SAX sub start_element |