У меня есть 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), которая больше подходит для этой цели?
Это может быть не точное совпадение, но Altova может экспортировать фактические различия между двумя файлами: https://www.altova.com/diffdog/differences-report-files.html .
Затем вы можете взять два различия и различить их.