Создание Excel после обнаружения различий в XML
Прежде всего, спасибо за эту замечательную утилиту "XMLUnit".
У меня есть требование, где я хочу сравнить 2 XML и найти различия. Как только различия обнаружены, мне нужно создать отчет Excel, который будет отображать все данные XML (аналогичные данные, а также различные данные). Сходство и различие данных будут выделены в этом Excel, используя некоторые цвета.
Пример-
Первый XML-
<Project>
<Policy>
<Amount>20</Amount>
<Balance>10</Balance>
<PolicyDetails>
<Amount>30</Amount>
<SendDate>2017-04-03</SendDate>
</PolicyDetails>
<PolicyDetails>
<Amount>100</Amount>
<SendDate>2017-04-02</SendDate>
</PolicyDetails>
<PolicyDetails>
<Amount>50</Amount>
<SendDate>2016-04-02</SendDate>
</PolicyDetails>
</Policy>
</Project>
Второй XML -
<Project>
<Policy>
<Amount>10</Amount>
<Balance>10</Balance>
<PolicyDetails>
<Amount>50</Amount>
<SendDate>2017-04-03</SendDate>
</PolicyDetails>
<PolicyDetails>
<Amount>100</Amount>
<SendDate>2017-05-05</SendDate>
</PolicyDetails>
</Policy>
</Project>
Теперь мне нужно найти сходства и различия этих XML-файлов и создать Excel, который будет отображать данные как
Я знаю, что могу читать XML с использованием JAVA по одному и делать это, но фактический XML будет иметь разные комбинации данных, где порядок может быть разным и т. Д.
Что я сделал до сих пор - я использовал XMLUnit 2 "DiffBuilder" и нашел все различия в этих XML. Я даже использовал свой собственный DifferenceEvaluator для некоторой пользовательской логики.
Я хочу выяснить, как мне написать различия и сходства в нужном формате в Excel. Может кто-нибудь помочь мне здесь?
Я также подумал о реализации ComparisonListener, уловил все сходства и различия и начал писать данные отсюда в Excel.
1 ответ
Я сделал что-то вроде этого, превратив каждый XML в Map<String, String>
где ключ карты - это xpath.
Например, для вашего первого XML я бы создал карту типа:
{
"Project[1]/Policy[1]/Amount[1]": "20",
"Project[1]/Policy[1]/Balance[1]": "10",
"Project[1]/Policy[1]/PolicyDetails[1]/Amount[1]": "30",
"Project[1]/Policy[1]/PolicyDetails[1]/SendDate[1]": "2017-04-03",
"Project[1]/Policy[1]/PolicyDetails[2]/Amount[1]": "100",
"Project[1]/Policy[1]/PolicyDetails[2]/SendDate[1]": "2017-04-02",
// etc
}
Затем вы можете сравнить две карты для отсутствующих / разных записей. Вы можете использовать xpath для предоставления удобного пользовательского интерфейса, где щелчок по ячейке ссылается на местоположение в XML.