如何忽略XmlUnit的XML声明差异?

时间:2018-04-11 08:44:54

标签: xmlunit xmlunit-2

如何在比较两个文档时将XmlUnit.Net配置为忽略XML声明?

假设我有以下控制文件:

<?xml version="1.0" encoding="utf-8"?>
<a><amount>1</amount></a>

我想与之比较:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<a><amount>1</amount></a>

比较应该没有差异。

我的期望是使用像这样的NodeFilter应该可行,但它没有:

var diff = DiffBuilder.Compare(control)
    .WithTest(test)
    .WithNodeFilter(n => n.NodeType != XmlNodeType.XmlDeclaration)
    .Build();

diff.Differences.Count().Should().Be(0);

断言失败,有两个不同 - 一个用于编码(不同的大小写),另一个用于独立属性。我对任何人都不感兴趣。

我是说n.NodeType != XmlNodeType.XmlDeclaration还是n.NodeType == XmlNodeType.XmlDeclaration没有任何区别。

我正在使用XMLUnit.Core v2.5.1。

1 个答案:

答案 0 :(得分:1)

NodeFilter仅适用于作为其他节点子节点的节点(由XmlNode.ChildNodes返回)。不幸的是,文档类型声明不是这种情况,这可能是一个错误。

在您的情况下,您想要调整DifferenceEvaluator并降级您不感兴趣的差异。像

DifferenceEvaluators.Chain(DifferenceEvaluators.Default,
    DifferenceEvaluators.DowngradeDifferencesToEqual(ComparisonType.XML_STANDALONE, ComparisonType.XML_ENCODING))

会吞下差异。

也许你不想只计算差异,但也要考虑它们的严重程度。编码的差异将是“相似”的差异,而独立的不同值是关键的。