Задача состоит в том, чтобы исключить IsoDateTime при сравнении двух XML с помощью XmlUnit lib
Пример:
<Product>
<InfoCommon>
<Dates>
<IsoDateTime>2020-02-11T11:41:33.12345</IsoDateTime> <!-- This should be excluded -->
</Dates>
</InfoCommon>
<ClientInfo>
<Address>
<Index>xxxxxx</Index>
</Address>
</ClientInfo>
<AnotherInfo>
<Dates>
<IsoDateTime>2020-02-11T11:41:33.12345</IsoDateTime> <!-- Should not be excluded -->
</Dates>
</AnotherInfo>
</Product>
Исключить узел IsoDateTime (оба узла) легко разрешается с помощью withNodeFilter , но это не то, что мне нужно.
Diff xmlDiff = DiffBuilder
.compare(target)
.withTest(source)
.checkForSimilar()
.withNodeFilter(n -> n.getNodeName().equals("IsoDateTime"))
.build()
Я добавил xmlunit-placeholder и добавил $ {xmlunit.ignore} в / Product / InforCommon / Dates / IsoDateTime, но это никак не работает
Diff xmlDiff = DiffBuilder
.compare(target)
.withTest(source)
.checkForSimilar()
.withDifferenceEvaluator(new PlaceholderDifferenceEvaluator())
.build()
<Product>
<InfoCommon>
<Dates>
<IsoDateTime>${xmlunit.ignore}</IsoDateTime> //This should be excluded
</Dates>
</InfoCommon>
<ClientInfo>
<Address>
<Index>xxxxxx</Index>
</Address>
</ClientInfo>
<AnotherInfo>
<Dates>
<IsoDateTime>2020-02-11T11:41:33.12345</IsoDateTime> //Should not be excluded
</Dates>
</AnotherInfo>
</Product>
Есть ли способ установить условие фильтрации по XPATH, чтобы не исключать второй IsoDateTime
----------- - РАЗРЕШЕНО -------------
Решено путем реализации DifferenceEvaluator в виде всплеска. Итак / Product / InforCommon / Dates / IsoDateTime всегда равен TODAY и для моего сравнения:
if (testElement.getFirstChild().getNodeValue().substring(0,10).equals(LocalDate.now.toString()))
затем
return ComparisonResult.SIMILAR;
Подробнее здесь
Для моего случая важно