Как сделать XMLUNIT WithNodeFilter динамическим C # - PullRequest
1 голос
/ 20 марта 2019

Я работаю над приложением, которое сравнивает файлы XML. Пользователь может ввести список узлов, в которых они хотят исключить в сравнении. Для сравнения я использую XMLUNIT . Мне нужно динамически добавить пользовательский ввод.

Приведенный ниже код работает, но не является динамическим для пользовательского ввода:

private bool Example1(ISource control, ISource test)
{
    var excludedNodes = new List<string> { "UserInput1", "UserInput2", "UserInput3" };
    var diff = DiffBuilder
        .Compare(control)
        .WithTest(test)
        .WithNodeFilter(x => !(x.Name.Equals(excludedNodes[0]) || x.Name.Equals(excludedNodes[1]) || x.Name.Equals(excludedNodes[2])))
        .Build();
    var hasDifferences = diff.HasDifferences();
    return hasDifferences;
}

Моя попытка динамически создать вышеуказанное:

private bool Example2(ISource control, ISource test)
{
    var excludedNodes = new List<string> { "UserInput1", "UserInput2", "UserInput3" };
    var diffBuilder = DiffBuilder
        .Compare(control)
        .WithTest(test);
    foreach (var excludedNode in excludedNodes)
    {
        diffBuilder.WithNodeFilter(x => !x.Name.Equals(excludedNode));
    }
    var diff = diffBuilder.Build();
    var hasDifferences = diff.HasDifferences();
    return hasDifferences;
}

Похоже, что объединение в цепочку "WithNodeFilter", как я это делал в примере 2. не работает.

1 Ответ

0 голосов
/ 20 марта 2019

Я не могу скомпилировать, чтобы быть уверенным, но я думаю, что вам нужно подумать о том, чтобы проверить, есть ли у исключенных узлов ваш node.Name - вместо проверки имени и сравнения его с каждым исключенным узлом.

private bool Example1(ISource control, ISource test)
{
    var excludedNodes = new List<string> { "UserInput1", "UserInput2", "UserInput3" };
    var diff = DiffBuilder
        .Compare(control)
        .WithTest(test)
        .WithNodeFilter(x => !excludedNodes.contains(x.Name))
        .Build();
    var hasDifferences = diff.HasDifferences();
    return hasDifferences;
}
...