问题
I want to use XMLUnit to compare two similar XML files.
Basically every thing is same, File1
is a copy of File2
, but in File2
I have changed the order of some elements in one node.
I am trying to run a test where it compares these files and returns a result of similar and not treat these files as different.
回答1:
I think this link can help you - http://www.ibm.com/developerworks/java/library/j-cq121906.html#N10158
Basically, if your File1 is like -
<account>
<id>3A-00</id>
<name>acme</name>
</account>
And File2 is same, but only differs in order of <name>
and <id>
-
<account>
<name>acme</name>
<id>3A-00</id>
</account>
Then you can write a test like below which will compare these and return similar.
public void testIdenticalAndSimilar() throws Exception {
String controlXML = "<account><id>3A-00</id><name>acme</name></account>";
String testXML = "<account><name>acme</name><id>3A-00</id></account>";
Diff diff = new Diff(controlXML, testXML);
assertTrue(diff.similar());
assertFalse(diff.identical());
}
Hope that helps.
回答2:
This should do it:
// Assuming file1 and file2 are not deeply nested XML files
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc1 = docBuilder.parse(file1);
Document doc2 = docBuilder.parse(file2);
// SOLUTION 1: Are the files "similar"?
Diff diff = new Diff(doc1, doc2);
System.out.println("Similar (true/false): " + diff.similar());
// SOLUTION 2: Should you want detailed differences (especially useful for deeply nested files)
Diff diff = new Diff(doc1, doc2);
diff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());
DetailedDiff detailedDiff = new DetailedDiff(diff);
System.out.println("Detailed differences: " + detailedDiff.getAllDifferences().toString());
Hope that helps a bit. Read up on XMLUnit here.
来源:https://stackoverflow.com/questions/1725993/how-can-i-compare-two-similar-xml-files-in-xmlunit