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

时间:2016-01-09 01:27:10

标签: 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: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级嵌套。

2 个答案:

答案 0 :(得分:1)

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

  

通过使用XMLDiff类,程序员能够确定是否   根据条件,两个文件实际上是不同的   对他们的应用很重要。程序员可以忽略   变化只是肤浅的(例如,不同的前缀)   相同的名称空间)然后XMLPatch提供更新的能力   原始XML只应用对原始内容重要的更改   XML。

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

答案 1 :(得分:0)

您可以使用Paste Special为XML生成类。

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

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

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

相关问题