首先,让我先告诉你我正在努力解决的问题的细节。
我们有一个第三方应用程序,它使用Xml Documents来存储它的所有业务逻辑并查找表等。该应用程序有一组基本的Xml文件,并使用一种继承模型来公开我们要编辑的继承的Xml文件,以自定义业务逻辑。由于它使用的继承的可怕实现,我说“有点”。
目前有超过3000个单独的Xml文件,范围从1k到5000k,总大小约为600MB。到目前为止唯一的好处是它们都使用相同的Xsd。
我们的问题是,我们会收到核心Xml文件的每月更新,我们应该将它们放到位,并升级我们的自定义文档以与新版本的基础文档对齐。我们目前正在使用DiffDog手动执行此操作,并将文档拼凑在一起以创建新文档,但我正试图围绕以编程方式执行此操作的可能性。让我看看我是否可以为您想象这一点:
我们从下面的结构开始,基础模板到位,以及我们可以定义自定义规则的自定义模板(我们做了很多)
.. \ LineOfBusiness \ BaseTemplates \ BaseXml_1_0_0_0.xml
.. \ LineOfBusiness \ CustomTemplates \ Document_1_0_0_0.xml
我们每个月都会进行升级,所以现在我们有了这样的结构:
.. \ LineOfBusiness \ BaseTemplates \ BaseXml_1_0_0_0.xml
.. \ LineOfBusiness \ BaseTemplates \ BaseXml_1_1_0_0.xml
.. \ LineOfBusiness \ CustomTemplates \ Document_1_0_0_0.xml
我们的工作主要是创建
.. \ LineOfBusiness \ CustomTemplates \ Document_1_1_0_0.xml
每月记录一下,将我们在之前版本中所做的更改纳入新版本逻辑。
我知道这个系统很荒谬,但我今天无法改变它。关于如何解决这个问题的任何想法都会很棒。我可以告诉你到目前为止我的想法......
反序列化Base和Custom旧版本文档以获取特定差异的列表,将这些差异应用于新Base的反序列化版本并将差异应用于它,然后重新序列化为xml。
将某种注释过程应用于自定义模板,以便我们可以在升级时以编程方式提取差异。
外包升级过程......
答案 0 :(得分:2)
如果您使用的是.NET语言,则可以完成尝试使用Microsoft's XML Diff and Patch工具/库的操作。
我用它来正确识别不同xml片段之间的变化。这对于我们的场景非常重要,因为我们在磁盘上的XML在存储在Sql Server XML列中后会因为删除无关紧要的空格和/或重新排列属性(Infoset)而有所不同。只是比较文本blob总会检测到差异,而实际上 XML 元素/值是相同的。
我没有使用该工具的修补功能,只使用了XmlDiff。
市场上有几种不错的商业XML diff工具,但我不知道提供代码或脚本API的任何工具。对于增值来说,这将是一个很好的功能!