【问题标题】:How to ignore XML declaration differences with XmlUnit?如何忽略与 XmlUnit 的 XML 声明差异?
【发布时间】:2018-09-21 01:40:09
【问题描述】:

如何配置 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。

【问题讨论】:

    标签: xmlunit xmlunit-2


    【解决方案1】:

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

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

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

    会吞下差异。

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

    【讨论】:

    • 使用您描述的评估器为我解决了问题。会注意严重程度的差异。感谢您对 XmlUnit 的奉献,感谢!
    • 不客气。我已经为NodeFilter 和文档类型打开了一个问题,它将在下一个版本中修复。
    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多