我正在寻找使用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级嵌套。
答案 0 :(得分:1)
我认为 XMLDiff 是最好的方法。不需要框架。如MSDN所示:
通过使用XMLDiff类,程序员能够确定是否 根据条件,两个文件实际上是不同的 对他们的应用很重要。程序员可以忽略 变化只是肤浅的(例如,不同的前缀) 相同的名称空间)然后XMLPatch提供更新的能力 原始XML只应用对原始内容重要的更改 XML。
你应该看看: https://msdn.microsoft.com/en-us/library/aa302294.aspx
答案 1 :(得分:0)
您可以使用Paste Special为XML生成类。
然后,您可以对xml进行反序列化,以创建代码生成类的实例。
所以对于两个xml文件;您可以创建两个对象,例如xmlObject1
和xmlObject2
。
然后您可以使用CompareObject来识别两个对象之间的差异。