Рассматривали ли вы использование инфраструктуры тестирования, такой как XSpec, которая уже решает эту проблему?
Как правило, два классических способа решения этой проблемы - это сравнение сериализованного XML-лексического кода после его передачи через канонизатор или сравнениедревовидные представления с использованием функции, такой как XPath 2.0 deep-equal ().
Ни один из них не является идеальным ответом.Во-первых, вещи, которые канонизация XML считает значимыми или несущественными, могут не совпадать с вещами, которые вы считаете значимыми или несущественными;и то же самое относится к XPath deep-equal()
.Во-вторых, вы действительно хотите знать не только, являются ли файлы одинаковыми, но и где различия.
Saxon имеет расширенную версию deep-equal()
под названием saxon:deep-equal()
, предназначенную для решения этих проблем: требуетсянабор флагов, которые можно использовать для настройки сравнения, и он пытается сказать вам, где различия с точки зрения предупреждающих сообщений.Но и это не идеальное решение.
В тестовых наборах W3C для XSLT 3.0 и XQuery мы отошли от сравнения выводов тестов в формате XML до написания утверждений с ожидаемыми результатами в терминах выражений XPath.В тестах используются следующие утверждения:
<result>
<all-of>
<assert>every $a in /out/* except /out/a4
satisfies $a/@actual = $a/@expected</assert>
<assert>/out/a4/@actual = 'false'</assert>
</all-of>
</result>