Я пытаюсь написать простой алгоритм для чтения двух файлов XML с точно такими же узлами и структурой, но не обязательно с одинаковыми данными внутри дочерних узлов и в другом порядке. Как я мог создать простую реализацию для создания третьего, временный XML, являющийся разницей между двумя первыми, используя Microsoft XML Diff .DLL?
XML Diff на MSDN:
образец 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" первые три дочерних элемента имеют НЕ для сравнения ... Как я могу это реализовать?