然后使用一些简单的规则将两者合并在一起:
例如,以下是“源”XML:
<Configuration>
<Items>
<Item Id="1" Position="true">
<Location X="UseExistingValue" Y="UseExistingValue" Z="UseExistingValue" />
<Something/>
<SomethingElse/>
</Item>
</Items>
</Configuration>
<Configuration>
<Items>
<Item Id="1" Position="false">
<Location X="123" Y="234" Z="345" />
<Another/>
<Something/>
</Item>
</Items>
</Configuration>
<Configuration>
<Items>
<Item Id="1" Position="true">
<Location X="123" Y="234" Z="345" />
<Something/>
<SomethingElse/>
</Item>
</Items>
</Configuration>
有人对可脚本化的XML差异/合并工具和/或.NET库(付费或免费)有什么建议吗?
谢了。
经过几天的折腾,我找到了一个我认为对我有效的解决方案。也许它也可以为其他人工作。
MS XML差异和修补工具是一个可行的选择。当您将第一个文件与第二个文件相比较时,它会创建一个XML“Diffgram”,列出在两个XML文件之间检测到的更改。
为了处理上面列出的所有3个规则,我在一个方向上对这两个文件进行了区分,然后使用Linq-to-XML打开DiffGram文件,并删除了所有的“add”和“remove”行。
XNamespace xd = "http://schemas.microsoft.com/xmltools/2002/xmldiff";
var doc = XDocument.Load(_diffGramFile);
doc.Root.DescendantsAndSelf(xd + "add").Remove();
doc.Root.DescendantsAndSelf(xd + "remove").Remove();
var newdoc = XDocument.Load(_diffGramFile);
newdoc.Root.DescendantsAndSelf(xd + "change")
.Where(x => x.Value == "UseExistingValue").Remove();
并将这个编辑的DiffGram与部分合并的文件合并,该文件处理规则3。将其保存到XML,然后生成根据上面定义的规则合并的最终XML。
希望这能帮助其他人。
提示:安装XmlDiffPatch库后,可以在C:\windows\assembly\gac\XmlDiffPatch\1.0.8.28__B03F5F7F11D50A3A\XmlDiffPatch.DLL中找到XmlDiffPatch DLL
本文向大家介绍C#异步编程详解,包括了C#异步编程详解的使用技巧和注意事项,需要的朋友参考一下 前言 本节主要介绍异步编程中Task、Async和Await的基础知识。 什么是异步? 异步处理不用阻塞当前线程来等待处理完成,而是允许后续操作,直至其它线程将处理完成,并回调通知此线程。 异步和多线程 相同点:避免调用线程阻塞,从而提高软件的可响应性。 不同点: 异步操作无须额外的线程负担,并且使用回
我有以下两门课。我可以说第一个是POJO类,第二个是Bean类吗? 1)POJO类,因为它只有getter和setter方法,所有成员都声明为私有 2) Bean类-所有成员变量都是私有的,具有getter和setter,并实现接口 它还有一个无参数构造函数。
本文向大家介绍C和C++混合编程问题,包括了C和C++混合编程问题的使用技巧和注意事项,需要的朋友参考一下 分析以下一段代码: 调用以上三个文件,编译通过,但是执行是出现以下问题: obj : error LNK2001: 无法解析的外部符号 "int __cdecl sum(int,int)" (?sum@@YAHHH@Z) E:\Programming\Grapic\test\Debug\te
本文向大家介绍C++与C的差异分析,包括了C++与C的差异分析的使用技巧和注意事项,需要的朋友参考一下 虽说C++是向后兼容C的,但C++与C还是存在许多差异。本文列举了几个例子加以说明,同时这些也是我们非常容易忽略的地方。本文仅简单的列举几例,更多的不同之处读者还需要在学习与实践中不断的进行发掘和总结。 C编译通过但C++编译不通过: 1、C++中编译器不允许在一个函数声明之前调用它,但C中编译
我最近开始学习C,我在理解指针语法时遇到了问题,例如当我写以下行时: 我怎样才能知道: > arr是指向整数指针数组的指针 arr是指向整数数组指针数组的指针 不都是一样的吗? 如果我有一个接收作为参数的函数,我想将其称为指向字符串数组的,这意味着指向指向数组的指针数组的指针,但它也是指向指针的指针吗?
本文向大家介绍C#编程总结(六)详解异步编程,包括了C#编程总结(六)详解异步编程的使用技巧和注意事项,需要的朋友参考一下 1、什么是异步? 异步操作通常用于执行完成时间可能较长的任务,如打开大文件、连接远程计算机或查询数据库。异步操作在主应用程序线程以外的线程中执行。应用程序调用方法异步执行某个操作时,应用程序可在异步方法执行其任务时继续执行。 2、同步与异步的区别 同步(Synchronous