私は現在、2つのxmlを比較するときに問題を抱えています。問題は、異なる子オーダーと比較するためにワイルドカードを適用しようとするときです。追加で、それらの子ノードの属性数がノード内で異なるため、比較がさらに難しくなります。XMLDiff/XMLUnit - 子オーダーを無視してワイルドカードを使用する
XMLUnit & .NET用の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>
ORGファイル:
<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を逆シリアル化してもう一度シリアル化します。同じ構造を持つ2つのXMLを持つ必要があります。 – LocEngineer