0

首先感谢这个伟大的实用程序“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 -

在此处输入图像描述

我知道我可以使用 JAVA 一个一个地读取 XML 并执行此操作,但实际的 XML 将具有不同的数据组合,其中排序可能不同,等等。

到目前为止我所做的——我使用了 XMLUnit 2“DiffBuilder”并发现了这些 XML 中的所有差异。我什至将我的自定义 DifferenceEvaluator 用于一些自定义逻辑。

我想弄清楚如何在excel中以所需的格式写出异同。任何人都可以在这里帮助我吗?

我还想过实现ComparisonListener并抓住每一个相似之处和差异,并从这里开始在excel中写入数据。

4

1 回答 1

0

我通过将每个 xml 转换为Map<String, String>映射键为 xpath 的位置来完成类似的操作。

例如,对于您的第一个 XML,我将创建一个 Map,例如:

{
    "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 提供一个漂亮的 UI,单击单元格链接到 XML 中的位置。

于 2017-10-12T15:55:28.220 回答