让我们假设有一个默认的version 1
XML文件:
<!--
Specification for a shirt
-->
<shirt color="red" size="L">
<buttons count=20/>
<pocket position="left">
<!-- this might be removed later on -->
</pocket>
</shirt>
在生产环境中部署时,此更改(出于某种原因,我们并不关心)如下(我们将其称为1A
):
<!-- Specification for a shirt -->
<shirt size="M" color="blue">
<buttons count=16/>
<pocket position="left">
<!-- this might be removed later on -->
</pocket>
</shirt>
现在,发布了XML version 2
的新版本作为新的默认值:
<!--
Specification for a shirt
-->
<shirt color="red" size="L" vendor="xyz">
<buttons count=16/>
<cloth type="silk"/>
</shirt>
现在,生产中的所有1A
文件都需要更改。
问题是我们如何找到前两个XML文件之间的差异并将其修补到第三个XML文件中?并不是说生产中的文件可能会更改XML属性的顺序,这不会算作语义更改,在计算差异时应将其忽略。同样,应忽略两个属性之间的换行符。 示例:
<shirt color="red" size="L">
应被视为等同于:
<shirt size="L"
color="red">
我知道我们可以编写一个Java程序来做到这一点,但是如果有一个xmldiff
这样的实用工具,那将是非常棒的,因为实际的XML文件大了数千行,并且有数百个这样的文件并在生产中运行许多变体。
第二,如果在进行差异/补丁时保留version 2
中的注释,那就太好了
答案 0 :(得分:0)
首先,就设计而言,我宁愿在产品定义树中的另一个级别而不是在xml输出级别上进行更改。
我在debian linux系统上尝试了xmldiff和xmlpatch,即使输入中包含新行,它也可以在版本2上明显地应用从版本1到版本1a的更改。 首先,您的文件应为正确的xml,count属性应使用引号引起来。我是手动完成的,但您可能会使用某些程序,例如python中的beautifulsoup。
这是我所做的。希望对您有所帮助。由于这些python程序是开放的,因此将其自动化以在文件的集合上运行将变得不难。
xmldiff ver1.xml ver1a.xml >ver1-diff
xmlpatch ver1-diff ver2.xml >ver2a.xml