Что ж, если вы хотите сделать это "вручную", вы можете использовать рекурсивную функцию и пройтись по структуре xml.Вот краткий пример:
var xmlFileA = //first xml
var xmlFileb = // second xml
var docA = new XmlDocument();
var docB = new XmlDocument();
docA.LoadXml(xmlFileA);
docB.LoadXml(xmlFileb);
var isDifferent = HaveDiferentStructure(docA.ChildNodes, docB.ChildNodes);
Console.WriteLine("----->>> isDifferent: " + isDifferent.ToString());
Это ваша рекурсивная функция:
private bool HaveDiferentStructure(
XmlNodeList xmlNodeListA, XmlNodeList xmlNodeListB)
{
if(xmlNodeListA.Count != xmlNodeListB.Count) return true;
for(var i=0; i < xmlNodeListA.Count; i++)
{
var nodeA = xmlNodeListA[i];
var nodeB = xmlNodeListB[i];
if (nodeA.Attributes == null)
{
if (nodeB.Attributes != null)
return true;
else
continue;
}
if(nodeA.Attributes.Count != nodeB.Attributes.Count
|| nodeA.Name != nodeB.Name) return true;
for(var j=0; j < nodeA.Attributes.Count; j++)
{
var attrA = nodeA.Attributes[j];
var attrB = nodeB.Attributes[j];
if (attrA.Name != attrB.Name) return true;
}
if (nodeA.HasChildNodes && nodeB.HasChildNodes)
{
return HaveDiferentStructure(nodeA.ChildNodes, nodeB.ChildNodes);
}
else
{
return true;
}
}
return false;
}
Имейте в виду, что это вернет true, только если узлы и атрибуты находятся вв обоих файлах XML используется один и тот же порядок и один и тот же регистр.Вы можете улучшить его, чтобы включить или исключить атрибуты / узлы.
Надеюсь, это поможет!