#java #xml #xmlunit-2
#Ява #xml #xmlunit-2
Вопрос:
Я сравниваю два XML-файла с помощью классов пакетов xmlunit. Я пытаюсь игнорировать порядок узлов при выборе узла. Но все же в результате различия я наблюдаю ,что он сравнивает узлы на одной и той же глубине в обоих xml и показывает их по-разному. Узел, который меня здесь интересует, — это «запись», а элемент для выбора узла-это timeDimensionStartDate. Пожалуйста, дайте мне знать, где я ошибаюсь.
Я использую следующие зависимости в своем pom.xml для того, чтобы использовать пакеты xmlunit2.
lt;dependencygt; lt;groupIdgt;org.xmlunitlt;/groupIdgt; lt;artifactIdgt;xmlunit-corelt;/artifactIdgt; lt;versiongt;2.8.2lt;/versiongt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;org.xmlunitlt;/groupIdgt; lt;artifactIdgt;xmlunit-matcherslt;/artifactIdgt; lt;versiongt;2.8.2lt;/versiongt; lt;/dependencygt;
Узел управления:
lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?gt; lt;dataRecord xmlns="https://someinfo"gt; lt;dhgt; lt;!---some fields --gt; lt;/dhgt; lt;recordsgt; lt;recordgt; lt;rtgt;123lt;/rtgt; lt;srvcsgt; lt;srvcgt;ABClt;/srvcgt; lt;/srvcsgt; lt;timeDimensionStartDategt;20211003lt;/timeDimensionStartDategt; lt;timeDimensionEndDategt;20211003lt;/timeDimensionEndDategt; lt;!---Other elements---gt; lt;/recordgt; lt;!--Multiple record nodes ---gt; lt;/recordsgt;
Тестовый узел
lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?gt; lt;dataRecord xmlns="https://someinfo"gt; lt;dhgt; lt;!---some fields --gt; lt;/dhgt; lt;recordsgt; lt;recordgt; lt;rtgt;123lt;/rtgt; lt;srvcsgt; lt;srvcgt;ABClt;/srvcgt; lt;/srvcsgt; lt;timeDimensionStartDategt;20211005lt;/timeDimensionStartDategt; lt;timeDimensionEndDategt;20211005lt;/timeDimensionEndDategt; lt;!---Other elements---gt; lt;/recordgt; lt;!--Multiple record nodes ---gt; lt;recordgt; lt;rtgt;123lt;/rtgt; lt;srvcsgt; lt;srvcgt;ABClt;/srvcgt; lt;/srvcsgt; lt;timeDimensionStartDategt;20211003lt;/timeDimensionStartDategt; lt;timeDimensionEndDategt;20211003lt;/timeDimensionEndDategt; lt;!---Other elements---gt; lt;/recordgt; lt;!--Multiple record nodes ---gt; lt;/recordsgt;
Difference received: INFO: Expected text value ‘20211003’ but was ‘20211005’ — comparing lt;timeDimensionStartDate …gt;20211003 at /dataRecord[1]/records[1]/record[1]/timeDimensionStartDate[1]/text()[1] to lt;timeDimensionStartDate …gt;20211005 at /dataRecord[1]/records[1]/record[1]/timeDimensionStartDate[1]/text()[1] (DIFFERENT)
XMLunit code snippet use for comaprison:
Diff nodeDiff = DiffBuilder.compare(source) .withTest(target).ignoreComments().ignoreWhitespace().checkForSimilar() .withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.conditionalBuilder() .whenElementIsNamed("record").thenUse(ElementSelectors.byXPath("./timeDimensionStartDate", ElementSelectors.byNameAndText)). elseUse(ElementSelectors.byName).build())) .withDifferenceEvaluator(((comparison, outcome) -gt; { if (outcome == ComparisonResult.DIFFERENT amp;amp; comparison.getType() == ComparisonType.CHILD_NODELIST_SEQUENCE) { return ComparisonResult.EQUAL; } return outcome; })).build();