XMLUNIT - Сравнение двух xmls с разными узлами
У меня есть 2 XML для сравнения:
File1.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<member>
<SchoolID>1021</SchoolID>
<CandidateType>First Year</CandidateType>
<CandidateName>John</CandidateName>
</member>
File2.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<member>
<CandidateID>3147</CandidateID>
<SchoolID>1021</SchoolID>
<CandidateType>Second Year</CandidateType>
<CandidateName>Peter</CandidateName>
</member>
Я использую xmlunit для сравнения, однако вывод, который я получаю, выглядит так:
Similar? false
Identical? false
***********************
Expected number of child nodes '2' but was '3' - comparing <member...> at /member[1] to <member...> at /member[1]
***********************
***********************
Expected sequence of child nodes '0' but was '1' - comparing <SchoolID...> at /member[1]/SchoolID[1] to <SchoolID...> at /member[1]/SchoolID[1]
***********************
***********************
Expected text value 'John' but was 'Peter' - comparing <CandidateName ...>John</CandidateName> at /member[1]/CandidateName[1]/text()[1] to <CandidateName ...>Peter</CandidateName> at /member[1]/CandidateName[1]/text()[1]
***********************
***********************
Expected sequence of child nodes '1' but was '2' - comparing <CandidateName...> at /member[1]/CandidateName[1] to <CandidateName...> at /member[1]/CandidateName[1]
***********************
***********************
Expected presence of child node 'null' but was 'CandidateID' - comparing at null to <CandidateID...> at /member[1]/CandidateID[1]
Мне нужно представить выходные данные так, чтобы они сообщали мне только о следующих различиях: Node CandidateID отсутствует в File1.xml и разница данных для Node CandidateName. Мне не нужны дополнительные детали. Есть ли способ настроить вывод detDiff.getAllDifferences().
Снимок кода выглядит так:
try {
// fr1 and fr2 are my two xml files.
Diff diff = new Diff(fr1, fr2);
System.out.println("Similar? " + diff.similar());
System.out.println("Identical? " + diff.identical());
DetailedDiff detDiff = new DetailedDiff(diff);
List differences = detDiff.getAllDifferences();
for (Object object : differences) {
Difference difference = (Difference)object;
System.out.println("***********************");
System.out.println(difference);
System.out.println("***********************");
}
1 ответ
В зависимости от ваших потребностей вы можете отфильтровать различия после сравнения или переопределить DifferenceListener
чтобы игнорировать различия, которые вас не интересуют.
Для фильтрации, кажется, вы могли бы просто посмотреть на isRecoverable
и убрать все восстанавливаемые различия.
Обычай DifferenceListener
было бы что-то вроде
detDiff.overrideDifferenceListener(new DifferenceListener() {
@Override
public int differenceFound(Difference diff) {
if (diff.getId() == DifferenceConstants.CHILD_NODELIST_SEQUENCE_ID
|| diff.getId() == DifferenceConstants.CHILD_NODELIST_LENGTH_ID) {
return RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL;
}
return RETURN_ACCEPT_DIFFERENCE;
}
@Override
public void skippedComparison(Node arg0, Node arg1) { }
});
прежде чем позвонить getAllDifferences
,