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

C# 在C中比较XML的最佳方法#,c#,xml,difference,C#,Xml,Difference,我正在寻找使用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:TextBo

我正在寻找使用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>

111
222
3333
444
555
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>

111
aaa
3333
bbb
555
ccc
ddd
我只希望得到这两个XML文件之间的差异,就像在本例中,它将是TextBox2和TextBox4,并为Repeat1_Repeat提供一个完整的节点

有没有一个简单的方法可以得到这个?也许使用一些框架?我使用的是.NET4.5.2,所以任何最新版本都可以

谢谢


编辑:哦,还有,我需要它用于n级嵌套。

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

通过使用XMLDiff类,程序员能够确定 事实上,两个文件在不同的条件下是不同的 对它们的应用很重要。程序员可以忽略 只是表面的更改(例如,不同的前缀) 相同的名称空间)。然后,XMLPatch提供了更新 通过仅应用与原始XML相关的更改来创建原始XML XML

您应该查看:

您可以使用为XML生成类

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

所以对于两个xml文件;您可以创建两个对象,如
xmlObject1
xmlObject2


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

嗨,Rodolfo,我检查过XMLDiff,但它支持n级嵌套吗?嗨,Kosala,我相信您指的是手动比较XML文件的方法?我需要它在程序中自动运行。@CRMJunkie你所说的手动方式是什么意思?我们不是在这里讨论手工过程。你读过那些链接中的文章吗?如果你不明白,请告诉我。我将发布一些示例代码。