【发布时间】:2017-09-15 11:59:41
【问题描述】:
我目前在比较 2 个 xmls 时遇到一个问题 - 原始文件和差异参考文件。问题是当我尝试应用通配符与不同的子顺序进行比较时 - 此外,这些子节点在节点中可能具有不同数量的属性,因此比较更加困难。
我尝试使用适用于 .NET 的 XMLUnit 和 XMLDiff 库实现解决方案,但没有成功。
using System;
using Org.XmlUnit.Builder;
using Org.XmlUnit.Diff;
using System.IO;
static void Main(string[] args)
{
string orgFilePath = @"C:\Temp\original.xml";
string refFilePath = @"C:\Temp\reference.xml";
StreamReader orgStreamReader = new StreamReader(orgFilePath);
StreamReader refStreamReader = new StreamReader(refFilePath);
String orgFile = XDocument.Load(orgStreamReader).ToString();
String refFile = XDocument.Load(refStreamReader).ToString();
var diff = DiffBuilder
.Compare(Input.FromString(orgFile))
.WithTest(Input.FromString(refFile))
.CheckForSimilar()
.Build();
foreach (var d in )
{
Console.WriteLine(d.Comparison);
Console.WriteLine();
}
Console.WriteLine(diff.Differences);
Console.ReadLine();
}
参考文件:
<deviceOrders>
<deviceOrder>
<operation>New</operation>
<moduleId>*</moduleId>
<net>TST</net>
<sort>VT</sort>
<moduleNr>220</moduleNr>
<deviceNr>0</deviceNr>
</deviceOrder>
<deviceOrder>
<operation>New</operation>
<moduleId>*</moduleId>
<net>79ST</net>
<sort>UP</sort>
<deviceNr>0</deviceNr>
</deviceOrder>
</deviceOrders>
组织文件:
<deviceOrders>
<deviceOrder>
<operation>New</operation>
<moduleId>1235</moduleId>
<net>79ST</net>
<sort>UP</sort>
<deviceNr>0</deviceNr>
</deviceOrder>
<deviceOrder>
<operation>New</operation>
<moduleId>1234</moduleId>
<net>TST</net>
<sort>VT</sort>
<moduleNr>220</moduleNr>
<deviceNr>0</deviceNr>
</deviceOrder>
</deviceOrders>
我还没有找到解决方案,所以请帮助我。
【问题讨论】:
-
只是一个疯狂的想法,但它可能有效:您可以定义一个镜像所有可能的子元素和属性的类,让可选的可以为空,然后反序列化两个 XML 并再次序列化它们。然后,您应该有两个具有相同结构的 XML。