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
.
我正在使用 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
.