I want to compare two xml files using XMLUnit. I would like the DetailedDiff to not report identical tags in different orders as differences. For example, if I created a DetailedDiff with these two snippets:
<a><b/><c/></a>
and
<a><c/><b/></a>
The DetailedDiff will create two Differences since the b and c tags are out of order. I have tried overriding element qualifiers but it doesn't result in any changes. Am I doing something wrong or is this impossible to do with XMLUnit? For reference here's the code I'm using to compare two xml files (not including overrideElementQualifier calls).
public List<Difference> getDifferenceList(Reader file1, Reader file2) {
Diff d = new Diff(file1, file2); //I'm passing the args as FileReaders
d.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());
detailedDiff = new DetailedDiff(d);
List<Difference> allDifferences = detailedDiff.getAllDifferences();
return allDifferences;
}
RecursiveElementNameAndTextQualifier
will yield the same result as the defaultElementNameQualifier
- b and c are out of order but other than that the documents are identical.Elements that are out of order constitute a recoverable difference, so
Diff
andDetailedDiff
will say the documents are "similar" but not "identical". So either you ignore recoverable differences or you must override theDifferenceListener
rather than theElementQualifier
to downgrade a difference of typeCHILD_NODELIST_SEQUENCE_ID
fromRETURN_IGNORE_DIFFERENCE_NODES_SIMILAR
(the default) toRETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL
. Something likewhich accepts the default but downgrades just the out-of-order differences.