有没有XmlUnit的替代品?

时间:2011-01-18 17:52:25

标签: xml xmlunit

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

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

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

XmlUnit已损坏,不提供比内置diff实用程序更多的功能。

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

5 个答案:

答案 0 :(得分:5)

我有一个类似的问题,在我的情况下,我有几个同名的标签,但不同的属性(顺序无关紧要),但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());

答案 1 :(得分:3)

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

XMLUnit.setIgnoreWhitespace(true);

答案 2 :(得分:1)

我同意吉姆的评论。我在XmlUnit中面临的大多数问题都是由于初始化不正确造成的。

但是,您可以随时查看XMLUnit源代码,如果您认为实现没有按照您的需要进行操作,请将Diff处理程序替换为您自己的源代码。代码很容易理解,您将能够完全控制行为,而无需花费太多精力来实现自己的diff引擎。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

你试过XUnit吗?