Создание 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.

Другие вопросы по тегам