Как игнорировать порядок идентичных элементов с помощью XMLUnit DetailedDifference?

Я хочу сравнить два xml файла с помощью XMLUnit. Я хотел бы, чтобы в Детальдиффе не сообщалось о идентичных тегах в разных заказах как отличия. Например, если я создал DetailDiff с этими двумя фрагментами:

 <a><b/><c/></a>

и

<a><c/><b/></a>

ПодробныйDiff создаст две отличия, так как теги b и c выходят из строя. Я попытался переопределить квалификаторы элементов, но это не приводит к каким-либо изменениям. Я что-то делаю неправильно или это невозможно сделать с XMLUnit? Для справки здесь используется код, который я использую для сравнения двух xml файлов (не включая вызовы overrideElementQualifier).

public List<Difference> getDifferenceList(Reader file1, Reader file2) {
    Diff d = new Diff(file1, file2); //I'm passing the args as FileReaders
    d.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());
    detailedDiff = new DetailedDiff(d);
    List<Difference> allDifferences = detailedDiff.getAllDifferences();
    return allDifferences;
}

Ответ 1

RecursiveElementNameAndTextQualifier даст тот же результат, что и по умолчанию ElementNameQualifier - b и c не соответствуют порядку, но кроме того, что документы идентичны.

Элементы, которые не соответствуют порядку, представляют собой восстанавливаемую разницу, поэтому Diff и DetailedDiff скажут, что документы "схожи", но не "идентичны". Поэтому либо вы игнорируете восстановимые различия, либо вы должны переопределить DifferenceListener, а не ElementQualifier, чтобы понизить разницу типа CHILD_NODELIST_SEQUENCE_ID от RETURN_IGNORE_DIFFERENCE_NODES_SIMILAR (по умолчанию) до RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL. Что-то вроде

public int differenceFound(Difference difference) {
    return difference.getId() == DifferenceConstants.CHILD_NODELIST_SEQUENCE_ID
        ? RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL
        : RETURN_ACCEPT_DIFFERENCE;
}

который принимает значение по умолчанию, но понижает только разницу вне порядка.