在C#中比较XML的最佳方式

本文关键字:最佳 方式 XML 比较 | 更新日期: 2023-09-27 18:29:37

我正在寻找使用C#比较两个XML文件差异的最佳方法。比如说,如果我有两个XML A和B,如下所示:

XML A

<data:TR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pd="http://www.ascentn.com/bpm/XMLSchema">
  <data:processFields />
  <data:formFields>
    <data:TextBox1>111</data:TextBox1>
    <data:TextBox2>222</data:TextBox2>
    <data:TextBox3>3333</data:TextBox3>
    <data:Repeat1_Repeat>
      <data:Repeat1>
        <data:TextBox4>444</data:TextBox4>
        <data:TextBox5>555</data:TextBox5>
      </data:Repeat1>
    </data:Repeat1_Repeat>
  </data:formFields>
</data:TR>

XML B

<data:TR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pd="http://www.ascentn.com/bpm/XMLSchema">
  <data:processFields />
  <data:formFields>
    <data:TextBox1>111</data:TextBox1>
    <data:TextBox2>aaa</data:TextBox2>
    <data:TextBox3>3333</data:TextBox3>
    <data:Repeat1_Repeat>
      <data:Repeat1>
        <data:TextBox4>bbb</data:TextBox4>
        <data:TextBox5>555</data:TextBox5>
      </data:Repeat1>
      <data:Repeat1>
        <data:TextBox4>ccc</data:TextBox4>
        <data:TextBox5>ddd</data:TextBox5>
      </data:Repeat1>
    </data:Repeat1_Repeat>
  </data:formFields>
</data:TR>

我只想得到两个XML文件之间的不同,就像在本例中它是TextBox2和TextBox4,以及Repeat1_Repeat的一个完整节点。

有简单的方法吗?也许使用一些框架?我使用的是.NET 4.5.2,所以最近的任何东西都可以使用!

谢谢!

编辑:哦,还有,我需要它来为n级嵌套工作。

在C#中比较XML的最佳方式

我认为XMLDiff是最好的方法。不需要框架。如MSDN上所示:

通过使用XMLDiff类,程序员能够确定事实上,根据以下条件,两个文件是不同的对其应用非常重要。程序员可以忽略只是表面的更改(例如相同的命名空间)。XMLPatch提供了更新通过仅将重要的更改应用于原始XMLXML。

你应该看看:https://msdn.microsoft.com/en-us/library/aa302294.aspx

您可以使用选择性粘贴为XML生成类。

然后,您可以取消xml的序列化,以创建代码生成类的实例。

因此,对于两个xml文件;可以创建两个对象,如xmlObject1xmlObject2

然后可以使用CompareObject来识别两个对象之间的差异。