【发布时间】:2010-12-16 02:36:12
【问题描述】:
我想使用XMLUnit 来比较两个相似的 XML 文件。
基本上每件事都是一样的,File1 是 File2 的副本,但在 File2 我已经更改了一个节点中某些元素的顺序。
我正在尝试运行一个测试,它比较这些文件并返回 相似 的结果,而不是将这些文件视为 不同。
【问题讨论】:
标签: xmlunit
我想使用XMLUnit 来比较两个相似的 XML 文件。
基本上每件事都是一样的,File1 是 File2 的副本,但在 File2 我已经更改了一个节点中某些元素的顺序。
我正在尝试运行一个测试,它比较这些文件并返回 相似 的结果,而不是将这些文件视为 不同。
【问题讨论】:
标签: xmlunit
我认为这个链接可以帮助你 - http://www.ibm.com/developerworks/java/library/j-cq121906.html#N10158
基本上,如果你的 File1 像 -
<account>
<id>3A-00</id>
<name>acme</name>
</account>
和File2一样,只是<name>和<id>的顺序不同-
<account>
<name>acme</name>
<id>3A-00</id>
</account>
然后您可以编写如下所示的测试来比较这些并返回相似的结果。
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());
}
希望对您有所帮助。
【讨论】:
应该这样做:
// 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());
希望能有所帮助。阅读 XMLUnit here。
【讨论】:
diff =
DiffBuilder.compare(expected)
.withTest(toBeVerified)
.ignoreWhitespace()
.checkForSimilar()
.withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byNameAndText, ElementSelectors.byName))
.build();
【讨论】: