1

让我们假设有一个默认的version 1XML 文件:

<!--
  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>

现在,新版本的 XMLversion 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

version 2其次,如果在执行 diff/patch 时保留了中的注释,那就太好了

4

1 回答 1

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
于 2020-05-21T07:35:56.260 回答