package gov.samhsa.acs.xdsb.common;
import java.io.IOException;
import java.util.List;
import org.custommonkey.xmlunit.DetailedDiff;
import org.custommonkey.xmlunit.Difference;
import org.custommonkey.xmlunit.ElementNameAndAttributeQualifier;
import org.custommonkey.xmlunit.ElementNameAndTextQualifier;
import org.custommonkey.xmlunit.ElementNameQualifier;
import org.custommonkey.xmlunit.XMLUnit;
import org.custommonkey.xmlunit.examples.RecursiveElementNameAndTextQualifier;
import org.xml.sax.SAXException;
public class XmlComparator {
public static DetailedDiff compareXMLs(String expectedResult,
String actualResult, List<String> ignorableXPathsRegex) {
DetailedDiff diff = null;
try {
setXMLUnitConfig();
diff = new DetailedDiff((XMLUnit.compareXML(expectedResult,
actualResult)));
diff.overrideElementQualifier(new ElementNameAndTextQualifier());
diff.overrideElementQualifier(new ElementNameQualifier());
diff.overrideElementQualifier(new ElementNameAndAttributeQualifier());
diff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());
if (ignorableXPathsRegex != null) {
RegexBasedDifferenceListener ignorableElementsListener = new RegexBasedDifferenceListener(
ignorableXPathsRegex);
/** setting our custom difference listener */
diff.overrideDifferenceListener(ignorableElementsListener);
}
@SuppressWarnings("unchecked")
List<Difference> differences = diff.getAllDifferences();
for (Object object : differences) {
Difference difference = (Difference) object;
System.out.println("***********************");
System.out.println(difference);
System.out.println("***********************");
}
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return diff;
}
private static void setXMLUnitConfig() {
XMLUnit.setIgnoreWhitespace(Boolean.TRUE);
XMLUnit.setIgnoreComments(Boolean.TRUE);
XMLUnit.setIgnoreDiffBetweenTextAndCDATA(Boolean.TRUE);
XMLUnit.setIgnoreAttributeOrder(Boolean.TRUE);
}
}