Compare XML ignoring element order

匿名 (未验证) 提交于 2019-12-03 02:30:02

问题:

With XMLUnit 2 how do you compare two documents without taking the element order into account?

I got this question for XMLUnit 1, but apparently the new API in v2 doesn't have the mentioned method anymore.

This is my current code:

Diff diff = DiffBuilder.compare(expected)             .withTest(actual)             .ignoreComments()             .ignoreWhitespace()             .checkForSimilar()             .build();  assertFalse(diff.hasDifferences()); 

Edit to Stefan Bodewigs comment:

These are the two strings i compare with above snippet:

String expected = "<root><foo>FOO</foo><bar>BAR</bar></root>"; String actual = "<root><bar>BAR</bar><foo>FOO</foo></root>"; 

The reported diffs

Expected element tag name 'foo' but was 'bar' - comparing <foo...> at /root[1]/foo[1] to <bar...> at /root[1]/bar[1] (DIFFERENT) Expected text value 'FOO' but was 'BAR' - comparing <foo ...>FOO</foo> at /root[1]/foo[1]/text()[1] to <bar ...>BAR</bar> at /root[1]/bar[1]/text()[1] (DIFFERENT) Expected element tag name 'bar' but was 'foo' - comparing <bar...> at /root[1]/bar[1] to <foo...> at /root[1]/foo[1] (DIFFERENT) Expected text value 'BAR' but was 'FOO' - comparing <bar ...>BAR</bar> at /root[1]/bar[1]/text()[1] to <foo ...>FOO</foo> at /root[1]/foo[1]/text()[1] (DIFFERENT) 

回答1:

One difference that may need to become clearer in the 2.x documentation is the default ElementSelector - roughly what used to be ElementQualifier in 1.x. Where 1.x defaults to match elements by name, 2.x defaults to match elements in order. Maybe this is a bad idea.

Your Diff should work if you switch to matching on element names.

.withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byName))



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!