Библиотека C# для четырехстороннего сравнения XML

У меня есть 4 файла XML: A, B, C и D. Я хочу знать, является ли разница между A и B такой же, как разница между C и D.

Моей первой мыслью было использовать библиотеку XML Diff Patch от Microsoft , которая сравнивает два файла и создает DiffGram, представляющий собой XML-документ, описывающий разницу между двумя сравниваемыми файлами. Я думаю, что я мог бы сравнить A с B, чтобы получить DiffGram X, и C с D, чтобы получить DiffGram Y, а затем выполнить третье сравнение XML между X и Y.

Идея звучит хорошо на бумаге; к сожалению, это оказывается не так просто. Разница между A и B очень похожа на разницу между C и D, но X и Y не похожи друг на друга.

Проблема в том, что он дает DiffGrams следующим образом:

<xd:node match="4">
           <xd:node match="2">
              <xd:node match="1">
                 <xd:remove match="1-3" />
              </xd:node>
           </xd:node>

           <xd:node match="1">
              <xd:node match="1">
                 <xd:remove match="1-3" />
              </xd:node>
           </xd:node>
        </xd:node>

У этого есть две основные проблемы: во-первых, это чрезвычайно загадочно - я бы предпочел, чтобы это было более удобочитаемо для человека, но это не конец света, если это не так (поскольку моя основная цель - программная обработка). Во-вторых (и это гораздо важнее), кажется, что это очень тесно связано с конкретными файлами XML, которые находятся в этом конкретном сравнении.

Кто-нибудь знает библиотеку .NET (желательно доступную в виде пакета NuGet), которая больше подходит для этой цели?

Ответы (1)

Это может быть не точное совпадение, но Altova может экспортировать фактические различия между двумя файлами: https://www.altova.com/diffdog/differences-report-files.html .

Затем вы можете взять два различия и различить их.