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

RMo*_*RMo 5 xmlunit xmlunit-2

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

假设我有以下控制文档:

<?xml version="1.0" encoding="utf-8"?>
<a><amount>1</amount></a>
Run Code Online (Sandbox Code Playgroud)

我想比较一下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<a><amount>1</amount></a>
Run Code Online (Sandbox Code Playgroud)

比较应该没有差异。

我的期望是使用像这样的 NodeFilter 应该可以工作,但事实并非如此:

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

diff.Differences.Count().Should().Be(0);
Run Code Online (Sandbox Code Playgroud)

断言因两个差异而失败 - 一个是编码(大小写不同),另一个是独立属性。我对任何一个都不感兴趣。

我说n.NodeType != XmlNodeType.XmlDeclarationn.NodeType == XmlNodeType.XmlDeclaration说都没有区别。

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

Ste*_*wig 6

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

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

DifferenceEvaluators.Chain(DifferenceEvaluators.Default,
    DifferenceEvaluators.DowngradeDifferencesToEqual(ComparisonType.XML_STANDALONE, ComparisonType.XML_ENCODING))
Run Code Online (Sandbox Code Playgroud)

会吞掉差异。

也许您不想只计算差异,还要看看它们的严重性。编码的差异将是“相似”的差异,而独立的不同值是至关重要的。