Сравнение двух файлов XML и создание третьего с помощью XMLDiff в C #

Я пытаюсь написать простой алгоритм для чтения двух файлов XML с точно такими же узлами и структурой, но не обязательно с одинаковыми данными внутри дочерних узлов и в другом порядке. Как я мог создать простую реализацию для создания третьего, временный XML, являющийся разницей между двумя первыми, используя Microsoft XML Diff .DLL?

XML Diff на MSDN:

XML Diff and Patch Tool

XML Diff and Patch GUI Tool

образец XML-кода два разных файла XML для сравнения:

 

 
  Sidney Crosby 
  PIT 
  C 
  39 
  32 
  33 
  20 
  29 
 


 

 
  Sidney Crosby 
  PIT 
  C 
  42 
  35 
  34 
  22 
  30 
 

Требуемый результат (разница между ними)

 

 
  Sidney Crosby 
  PIT 
  C 
  3 
  3 
  1 
  2 
  1 
 

В этом случае я, вероятно, использовал бы XSLT для преобразования результирующего «дифференциального» файла XML в отсортированный файл HTML, но я не там еще нет. Все, что я хочу сделать, это отобразить в третьем XML-файле разность каждого числового значения каждого узла, начиная с дочернего узла "GP".

Код C #, который у меня есть:

private void CompareXml(string file1, string file2)
{

    XmlReader reader1 = XmlReader.Create(new StringReader(file1));
    XmlReader reader2 = XmlReader.Create(new StringReader(file2));

    string diffFile = StatsFile.XmlDiffFilename;
    StringBuilder differenceStringBuilder = new StringBuilder();

    FileStream fs = new FileStream(diffFile, FileMode.Create);
    XmlWriter diffGramWriter = XmlWriter.Create(fs);

    XmlDiff xmldiff = new XmlDiff(XmlDiffOptions.IgnoreChildOrder |
                            XmlDiffOptions.IgnoreNamespaces |
                            XmlDiffOptions.IgnorePrefixes);
    bool bIdentical = xmldiff.Compare(file1, file2, false, diffGramWriter);

    diffGramWriter.Close();

    // cleaning up after we are done with the xml diff file
    File.Delete(diffFile);
}

Вот что у меня есть пока что, но результаты - мусор ... обратите внимание, что для каждого узла "Player" первые три дочерних элемента имеют НЕ для сравнения ... Как я могу это реализовать?

18
задан ItsJ0el 21 August 2018 в 11:31
поделиться