DiffBuilder-忽略元素值,但确保存在XML节点

时间:2019-04-08 22:17:21

标签: c# unit-testing xmlunit

我正在使用DiffBuilder比较两个XML文件。 对于给定的元素Product,我想检查该元素是否存在,但我想忽略其值。 可以使用XmlUnit吗?

无论是否存在Product元素,我下面的代码都可以工作,这对我需要的内容不起作用

var differenceBuilder = DiffBuilder
                .Compare(Input.FromDocument(controlXmlFile))
                .WithTest(Input.FromDocument(testXmlDile))
                .WithNodeFilter(n => n.Name != "Product");

1 个答案:

答案 0 :(得分:1)

在这种情况下,您不想丢弃节点本身,而是要丢弃节点之间的差异。您不会为此使用NodeFilter,而是使用DifferenceEvaluator

一个非常简化的版本可能是

.WithDifferenceEvaluator((comparison, outcome) =>
        comparison.ControlDetails.Target.Name == "Product" ? ComparisonResult.EQUAL : outcome
    ) 

,但您需要考虑到ControlDetails可能是null(例如,看TestDetails)。而且,如果您的Product节点具有子元素,则可能要用NodeFilter过滤掉它们,或者检查当前比较目标的任何父元素是否命名为Product