Чтобы найти различия между двумя файлами xml, можно ли использовать XSLT, если да, вы можете поделиться небольшим примером xslt ?? Обратите внимание, что xslt должен иметь возможность принимать любые два файла xml, они не должны предполагать какую-либо конкретную структуру дерева.С помощью XSLT можно сравнить два xml?
ответ
Начиная с XSLT 2.0 вы можете использовать функцию для сравнения двух последовательностей в общем или двух узлов документа, если вам нужно, например, deep-equal(doc('file1.xml'), doc('file2.xml'))
с возвратом true, если два файла считаются равными, как определено в связанной спецификации.
Что касается поиска «различий», вы даже не объяснили, какой результат вы ищете. Saxon 9 в коммерческих изданиях имеет saxon:deep-equal
, которые в соответствии с http://saxonica.com/html/documentation/functions/saxon/deep-equal.html позволяют установить флаг ?
и обработчик ошибок
Объясните причину для неигрового. Если результат не равен, в ErrorListener будет отправлено сообщение об ошибке , объясняющее причину. (В общем, последовательность предупреждающих сообщений будут отправлены, начиная с разностной самого низкого уровня и продвигаясь вверх по дереву)
Но это не то, стандартизованы.
Прежде чем начать кодирование в XSLT или на любом другом языке, вам необходимо написать спецификацию того, что вы хотите, чтобы программа выполняла. Это сложное требование, которое невозможно определить в трех строках. По крайней мере одна компания - DeltaXML - делает это для жизни.
Первой задачей является определение того, что означает, что для двух файлов одинаковые. (Вы можете взять спецификацию fn: глубокую-равную как отправную точку). Как только вы это сделали, гораздо труднее решить, какой результат вы хотите произвести, когда файлы разные. Для того, чтобы сделать один очень простой пример, какие выходные вы хотите для файлов:
(а)
<a><b/><c/></a>
(б)
<a><c/><b/></a>
в этом примере нет разницы – user3626733
какой вид доказывает суть: вы не можете указывать этот один пример за раз, вам нужно написать общие правила. –