有没有XmlUnit的替代品?

15

我需要对包含生成的.xml和.wsdl文件的大型目录结构进行比较。生成的.xml文件在子元素出现的顺序上存在差异。XmlUnit Diff.similar() 方法应该处理这种情况:

'如果两个文档包含相同的元素和属性(不考虑顺序),则认为它们是“相似的”'。

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

XmlUnit有问题,提供的功能不超过内置的diff工具。

是否有其他替代XmlUnit的工具,能够识别像子元素排序这样的.xml文件的简单差异?


6
如果您需要帮助,您需要编辑您的帖子以包括以下内容:(a)显示您如何实例化Diff并调用Diff.similar()的代码,以及(b)演示您认为输出不正确的XML的最小实例。 - Jim Garrison
5个回答

6
我有一个类似的问题,在我的情况下,我有几个具有相同名称但不同属性的标签(顺序无关紧要),但是XmlUnit总是先与第一个比较,第二个与第二个...可以交换。我的问题是:
在这里:Comparing similar xml files with XmlUnit with unordered tags (same tag name with different attributes) 我在这里找到了解决方案:http://www.infoq.com/articles/xml-unit-test 在我的情况下,只需覆盖元素限定符即可解决此问题:
    Diff diff = new Diff(controlXml, responseXml);
    diff.overrideElementQualifier(new ElementNameAndAttributeQualifier());

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

3
这是我对XMLUnit的主要问题之一,静态设置会导致测试彼此影响。我更希望在Diff对象上看到这些调用。 - Somatik

1

在使用xmlunit比较之前,最好先对XML进行排序,而不是使用xmlunit的排序。编写自己的排序方法比为满足需求配置xmlunit要容易得多。


1

我同意Jim的评论。我在使用XmlUnit时遇到问题,大部分是由于初始化错误导致的。

不过,如果你觉得实现不是你需要的,你可以随时查看XMLUnit源代码,并将Diff处理程序替换为自己的。代码非常容易理解,你将能够完全控制行为,而不需要太多努力来实现自己的差异引擎。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接