我正在使用DiffBuilder
比较两个XML文件。
对于给定的元素Product,我想检查该元素是否存在,但我想忽略其值。
可以使用XmlUnit吗?
无论是否存在Product元素,我下面的代码都可以工作,这对我需要的内容不起作用
var differenceBuilder = DiffBuilder
.Compare(Input.FromDocument(controlXmlFile))
.WithTest(Input.FromDocument(testXmlDile))
.WithNodeFilter(n => n.Name != "Product");
答案 0 :(得分:1)
在这种情况下,您不想丢弃节点本身,而是要丢弃节点之间的差异。您不会为此使用NodeFilter
,而是使用DifferenceEvaluator
。
一个非常简化的版本可能是
.WithDifferenceEvaluator((comparison, outcome) =>
comparison.ControlDetails.Target.Name == "Product" ? ComparisonResult.EQUAL : outcome
)
,但您需要考虑到ControlDetails
可能是null
(例如,看TestDetails
)。而且,如果您的Product
节点具有子元素,则可能要用NodeFilter
过滤掉它们,或者检查当前比较目标的任何父元素是否命名为Product
。