C#比较两个XML文件

时间:2015-08-23 16:21:28

标签: c# .net xml linq visual-studio-2013

我正在使用C#中的同步程序,它应该能够在服务器和多个客户端之间同步文件夹和文件。问题是只应将服务器上的内容发送给客户端。 我想比较两个XML文件并将结果放在一个新的XML文件中。 我希望能够看到文件1和2之间的区别是什么,只能从文件1中获取文件2.缺少如下所示的内容。 XML文件1 - XML文件2 = XML文件3

XML文件1 - 这是所有文件和子文件夹的视图

<Sync>
  <file name="file1.exe" md5="301977135631682077322272102379711510898" />
  <file name="file2.gif" md5="198293138141481761522471841122211715365100" />
  <file name="file3.docx" md5="2421394619714515234127212777726185214112245"/>
  <file name="file4.docx" md5="192234220151104120192442391857158145211131" />
  <file name="file5.txt" md5="168303710116177182411519715713816617416674" />
  <file name="file6.bmp" md5="1792011292231121792151655125106213101156216" />
  <file name="file7.txt" md5="33187821621591371126952143181189193108" />
  <file name="file8.ini" md5="2282341791393124126722550279185251209139" />
  <folder name="folder1">
    <file name="file9.reg" md5="17553712523921412874140137119129165185219" />
    <folder name="folder2">
      <file name="file10.png" md5="13197182105223023710241762821170145139202" />
      <file name="file11.docx" md5="205130242851746130180151132127731757621530" />
    </folder>
  </folder>
</Sync>

XML文件2 - 这是文件和子文件夹的所有其他路径的视图

<Sync>
  <file name="file1.exe" md5="301977135631682077322272102379711510898" />
  <file name="file7.txt" md5="33187821621591371126952143181189193108" />
  <file name="file8.ini" md5="2282341791393124126722550279185251209139" />
  <folder name="folder1">
    <file name="file9.reg" md5="17553712523921412874140137119129165185219" />
      <file name="file13.docx" md5="205130242851746130180151132127731757621530" />
    <folder name="folder2">
      <file name="file11.docx" md5="205130242851746130180151132127731757621530" />
      <file name="file12.docx" md5="205130242851746130180151132127731757621530" />
    </folder>
  </folder>
</Sync>

XML文件3 - 这是缺少文件1的所有文件和子文件夹的视图

<Sync>
  <file name="file2.gif" md5="198293138141481761522471841122211715365100" />
  <file name="file3.docx" md5="2421394619714515234127212777726185214112245"/>
  <file name="file4.docx" md5="192234220151104120192442391857158145211131" />
  <file name="file5.txt" md5="168303710116177182411519715713816617416674" />
  <file name="file6.bmp" md5="1792011292231121792151655125106213101156216" />
  <folder name="folder1">
    <folder name="folder2">
      <file name="file10.png" md5="13197182105223023710241762821170145139202" />
    </folder>
  </folder>
</Sync>

2 个答案:

答案 0 :(得分:0)

您可以使用WinMerge作为Windows的开源差异和合并工具。他可以比较文件夹和文件,以易于理解和处理的可视文本格式呈现差异。

答案 1 :(得分:-1)

最简单的方法是使用diffgrams

以下是示例Compare XML fragments & return differences

密码:

var result = new XDocument();
var writer = result.CreateWriter();

var diff = new Microsoft.XmlDiffPatch.XmlDiff();    
diff.Compare(node1, node2, writer);

writer.Flush(); 
writer.Close();