Как игнорировать различия в объявлении XML с помощью XmlUnit?

Как настроить XmlUnit.Net для игнорирования объявления XML при сравнении двух документов?

Предположим, у меня есть следующий контрольный документ:

<?xml version="1.0" encoding="utf-8"?>
<a><amount>1</amount></a>

Что я хочу сравнить с:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<a><amount>1</amount></a>

Сравнение не должно привести к различиям.

Я ожидаю, что использование такого NodeFilter должно работать, но это не так:

var diff = DiffBuilder.Compare(control)
    .WithTest(test)
    .WithNodeFilter(n => n.NodeType != XmlNodeType.XmlDeclaration)
    .Build();

diff.Differences.Count().Should().Be(0);

Утверждение не выполняется с двумя отличиями: одно для кодировки (другой регистр) и другое для автономного атрибута. Я не заинтересован в любом.

Скажу ли я n.NodeType != XmlNodeType.XmlDeclaration или n.NodeType == XmlNodeType.XmlDeclaration не имеет значения.

Я использую XMLUnit.Core v2.5.1.


person RMo    schedule 11.04.2018    source источник


Ответы (1)


NodeFilter применяется только к узлам, которые являются дочерними элементами других узлов (возвращенных XmlNode.ChildNodes). К сожалению, это не относится к объявлению типа документа, что, вероятно, является ошибкой.

В вашем случае вы хотите настроить DifferenceEvaluator и понизить различия, которые вас не интересуют. Что-то вроде

DifferenceEvaluators.Chain(DifferenceEvaluators.Default,
    DifferenceEvaluators.DowngradeDifferencesToEqual(ComparisonType.XML_STANDALONE, ComparisonType.XML_ENCODING))

проглотил бы различия.

Может быть, вы хотите не просто подсчитывать различия, но и смотреть на их серьезность. Разница в кодировании будет «похожей» разницей, в то время как разные значения автономной работы являются критическими.

person Stefan Bodewig    schedule 11.04.2018
comment
Использование описанного вами оценщика решает проблему для меня. Обратите внимание на различия в серьезности. Спасибо за вашу преданность XmlUnit! - person RMo; 11.04.2018
comment
пожалуйста. Я открыл проблему для NodeFilter и типов документов, она будет исправлена ​​в следующем выпуске. - person Stefan Bodewig; 11.04.2018