c# - DiffBuilder - 忽略元素值但确保 XML 节点存在
问题描述
我DiffBuilder
用来比较两个 XML 文件。对于给定的元素 Product,我想检查该元素是否存在,但我想忽略它的值。可以使用XmlUnit吗?
无论 Product 元素是否存在,我下面的代码都可以工作,这对我需要的东西不起作用
var differenceBuilder = DiffBuilder
.Compare(Input.FromDocument(controlXmlFile))
.WithTest(Input.FromDocument(testXmlDile))
.WithNodeFilter(n => n.Name != "Product");
解决方案
在这种情况下,您不想丢弃节点本身,而是丢弃节点之间的差异。您不会为此使用 aNodeFilter
而是使用 a DifferenceEvaluator
。
一个非常简化的版本可能是这样的
.WithDifferenceEvaluator((comparison, outcome) =>
comparison.ControlDetails.Target.Name == "Product" ? ComparisonResult.EQUAL : outcome
)
但是您需要考虑到ControlDetails
可能是null
(并TestDetails
改为查看)例如。如果您的Product
节点有子元素,您可能希望将它们过滤掉NodeFilter
或检查当前比较目标的任何父节点是否已命名Product
。
推荐阅读
- javascript - Angular 5 ngModel 不更新值
- python - 对列表中的特定元素进行方程式,然后使用结果与下一个元素进行方程式?
- react-native - 排毒自动化框架指南:React Native?创建 End 2 端和集成测试框架
- c - 使用双指针的二叉树级顺序遍历
- javascript - 如何在Javascript中将数组值映射到对象内的数组?
- git - 当我认为应该更新时,更新 git 钩子没有回显?
- java - 将 YAML 文件中的列表映射到对象列表
- scala - 在哪里放置不可变函数定义?
- python-3.x - 如何从调度程序中获取错过的作业
- javascript - 如何在异步功能上使用 debounce?