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

DiffBuilder - ignore element value but make sure the XML node is present

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

无论是否存在 Product 元素,我下面的代码都可以正常工作,这不符合我的需要

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

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

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

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

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