15

我需要区分包含生成的 .xml 和 .wsdl 文件的大型目录结构。生成的 .xml 文件在子元素出现的顺序上有所不同。XmlUnit Diff.similar() 方法应该处理这种情况:

'如果两个文档包含相同的元素和属性,无论顺序如何,它们都被认为是“相似的”。

然而,情况并非如此。我拿了一个 .xml 文件,颠倒了两个子元素的顺序,XmlUnit 说它们不相似。

XmlUnit 已损坏,仅提供内置 diff 实用程序的功能。

是否有 XmlUnit 的替代方法可以识别 .xml 文件中的简单差异,例如子元素的排序?

4

5 回答 5

6

我有一个类似的问题,在我的情况下,我有几个标签名称相同,但属性不同(顺序无关紧要),但 XmlUnit 总是先检查第一个,第二个检查第二个......可以交换。我的问题是:

将类似的 xml 文件与带有无序标签的 XmlUnit 进行比较(相同的标签名称具有不同的属性)

我在这里找到了解决方案:

http://www.infoq.com/articles/xml-unit-test

就我而言,它只是通过覆盖元素限定符来解决:

    Diff diff = new Diff(controlXml, responseXml);
    diff.overrideElementQualifier(new ElementNameAndAttributeQualifier());
于 2011-07-05T09:54:45.683 回答
3

我发现设置以下选项可以解决不准确(不)相似性的问题:

XMLUnit.setIgnoreWhitespace(true);
于 2011-05-17T08:28:53.303 回答
1

我同意吉姆的评论。我在使用 XmlUnit 时遇到的大多数问题都是由于初始化不正确造成的。

但是,如果您觉得实现没有做您需要的事情,您可以随时查看 XMLUnit 源代码并用您自己的处理程序替换 Diff 处理程序。代码很容易理解,您将能够完全控制行为,而无需付出太多努力来实现自己的差异引擎。

于 2011-02-23T19:33:17.683 回答
1

最好先对 XML 进行排序,然后再将其与 xmlunit 进行比较,而不是使用 xmlunit 排序自己编写,这比根据需要配置 xmlunit 容易得多

于 2011-05-31T17:09:33.823 回答
0

你试过XUnit吗?

于 2011-02-23T19:33:11.553 回答