以编程方式区分/合并Xml文档

以编程方式区分/合并Xml文档,xml,automation,merge,diff,Xml,Automation,Merge,Diff,首先,让我先告诉你我试图解决的问题的细节 我们有一个第三方应用程序,它使用Xml文档存储所有业务逻辑和查找表等。应用程序有一组基本的Xml文件,并使用一种继承模型来公开继承的Xml文件,我们要编辑这些文件以自定义业务逻辑。我之所以说“有点”,是因为它使用了可怕的继承实现 目前有3000多个独立的Xml文件,从1k到5000k不等,总大小约为600MB。到目前为止,唯一的好处是它们都使用相同的Xsd 我们的问题是,我们每月都会收到核心Xml文件的更新,我们应该将它们放在适当的位置,并升级我们的自定

首先,让我先告诉你我试图解决的问题的细节

我们有一个第三方应用程序,它使用Xml文档存储所有业务逻辑和查找表等。应用程序有一组基本的Xml文件,并使用一种继承模型来公开继承的Xml文件,我们要编辑这些文件以自定义业务逻辑。我之所以说“有点”,是因为它使用了可怕的继承实现

目前有3000多个独立的Xml文件,从1k到5000k不等,总大小约为600MB。到目前为止,唯一的好处是它们都使用相同的Xsd

我们的问题是,我们每月都会收到核心Xml文件的更新,我们应该将它们放在适当的位置,并升级我们的自定义文档,以与新版本的基础文档保持一致。我们目前正在手动执行此操作,使用DiffDog,并将文档拼接在一起以创建新的文档,但我正在尝试以编程方式执行此操作的可能性。让我看看我是否能为你设想一下:

我们从下面这样的结构开始,基本模板就位,自定义模板,我们可以在其中定义自定义规则(我们经常这样做)

..\LineOfBusiness\BaseTemplates\BaseXml\u 1\u 0\u 0.xml
..\LineOfBusiness\CustomTemplates\Document\u 1\u 0\u 0.xml 然后,我们每个月都会进行升级,因此现在我们的结构如下:

..\LineOfBusiness\BaseTemplates\BaseXml\u 1\u 0\u 0.xml
..\LineOfBusiness\BaseTemplates\BaseXml\u 1\u 0\u 0.xml
..\LineOfBusiness\CustomTemplates\Document\u 1\u 0\u 0.xml 我们的工作本质上是创建

..\LineOfBusiness\CustomTemplates\Document\u 1\u 0\u 0.xml 每月记录我们自己,将我们在以前版本中所做的更改纳入新版本逻辑

我知道这个制度很荒谬,但我今天无法改变。任何关于如何解决这个问题的想法都会很好。我可以告诉你到目前为止我的想法

  • 反序列化基础文档和自定义旧版本文档以获得特定差异的列表,然后将这些差异应用到新基础的反序列化版本并将差异应用到它,然后重新序列化为xml

  • 对自定义模板应用某种注释过程,以便我们可以在升级时以编程方式提取差异

  • 将升级过程外包


  • 如果您使用的是.NET语言,您可能能够完成您试图使用工具/库所做的事情

    我使用它正确地识别了不同xml片段之间的变化。这对于我们的场景很重要,因为磁盘上的XML在存储在Sql Server XML列中后会有所不同,因为删除了不重要的空格和/或重新排列属性()。当XML元素/值实际上相同时,仅比较文本blob总是可以检测到差异

    我没有使用该工具的修补功能,只使用了XmlDiff


    市场上有几种很好的商业XMLDiff工具,但我不知道有哪种工具提供代码或脚本API。这将是一个很好的增值功能

    我们在这里主要是一家微软商店,尽管我们有两名Java开发人员。但撇开语言不谈,任何想法或想法都将受到欢迎。我已经看过其他的Diff/Patch工具,我将不得不看看那个。这是我一直在思考的基本概念。获取两个5_0文档,并从中生成修补程序。然后将该修补程序应用于5_1文档,创建自定义5_1文档。如果您得到了符合自己喜好的内容,请发布相关内容。我想听听你的经验。祝你好运XMLDiff非常适合比较,唯一的问题是我可以生成的DiffGram存储原始文档的哈希值。因此,我无法将修补程序应用于新文档。此外,它基于节点索引构建补丁,因此我也无法手动将其应用于新文档。这个工具将来肯定会有用,但我认为在这种情况下它不会有帮助。不管这对我的特殊情况有什么帮助,我认为这是这个问题的最佳答案,所以我继续把它标记为已回答。