在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级嵌套工作。
我认为XMLDiff是最好的方法。不需要框架。如MSDN上所示:
通过使用XMLDiff类,程序员能够确定事实上,根据以下条件,两个文件是不同的对其应用非常重要。程序员可以忽略只是表面的更改(例如相同的命名空间)。XMLPatch提供了更新通过仅将重要的更改应用于原始XMLXML。
你应该看看:https://msdn.microsoft.com/en-us/library/aa302294.aspx
您可以使用选择性粘贴为XML生成类。
然后,您可以取消xml的序列化,以创建代码生成类的实例。
因此,对于两个xml文件;可以创建两个对象,如xmlObject1
和xmlObject2
。
然后可以使用CompareObject来识别两个对象之间的差异。