$d1 =~ s/\s+$//;
$d2 =~ s/\s+$//;
+ # compress other whitespace
+ $d1 =~ s/\n/ /g;
+ $d1 =~ s/ +/ /g;
+ $d2 =~ s/\n/ /g;
+ $d2 =~ s/ +/ /g;
+
if ($d1 ne $d2) {
- print STDERR "$nsuri1/$lname1 has differing textual content\n";
+ print STDERR "$nsuri1/$lname1 has differing textual content ('$d1' vs. '$d2')\n";
exit(1);
}
}
my $c1 = $n1->getChildNodes;
my $c2 = $n2->getChildNodes;
- if ($c1->getLength != $c2->getLength) {
+ my @c1 = ();
+ my @c2 = ();
+
+ # find all elements except comments and blanks (not perfect, since we don't get
+ # compression, but ok)
+ for my $i (0..($c1->getLength-1)) {
+ my $item = $c1->item($i);
+ next if ($item->getNodeType == XML::DOM::COMMENT_NODE);
+ next if ($item->getNodeType == XML::DOM::TEXT_NODE && $item->getData !~ /\S/);
+
+ push @c1, $item;
+ }
+ for my $i (0..($c2->getLength-1)) {
+ my $item = $c2->item($i);
+ next if ($item->getNodeType == XML::DOM::COMMENT_NODE);
+ next if ($item->getNodeType == XML::DOM::TEXT_NODE && $item->getData !~ /\S/);
+
+ push @c2, $item;
+ }
+
+ if (scalar @c1 != scalar @c2) {
+ print STDERR scalar @c1, "\n";
+ print STDERR scalar @c2, "\n";
print STDERR "$nsuri1/$lname1 has differing number of children\n";
exit(1);
}
- for my $i (0..($c1->getLength-1)) {
- compare($c1->item($i), $c2->item($i), $nsup1, $nsup2);
+ for my $i (0..$#c1) {
+ compare($c1[$i], $c2[$i], $nsup1, $nsup2);
}
$nsup1->pop_context;
if (!defined($attr2_found)) {
print STDERR "Attribute $nsuri1/$lname1 exists on one side but not the other\n";
- last;
+ exit(1);
}
if ($attr1->getValue ne $attr2_found->getValue) {
print STDERR "Attribute $nsuri1/$lname1 has differing values\n";
+ exit(1);
}
}
}