如何忽略 XML 与 XmlUnit 的声明差异?
How to ignore XML declaration differences with XmlUnit?
如何配置 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.
NodeFilter
仅适用于作为其他节点(由 XmlNode.ChildNodes
返回)的子节点的节点。不幸的是,文档类型声明不是这种情况,这可能是一个错误。
在您的情况下,您想调整 DifferenceEvaluator
并降级您不感兴趣的差异。例如
DifferenceEvaluators.Chain(DifferenceEvaluators.Default,
DifferenceEvaluators.DowngradeDifferencesToEqual(ComparisonType.XML_STANDALONE, ComparisonType.XML_ENCODING))
会吞下差异。
也许您不想只计算差异,还想查看它们的严重程度。编码的差异将是 "similar" 差异,而 standalone 的不同值很关键。
如何配置 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.
NodeFilter
仅适用于作为其他节点(由 XmlNode.ChildNodes
返回)的子节点的节点。不幸的是,文档类型声明不是这种情况,这可能是一个错误。
在您的情况下,您想调整 DifferenceEvaluator
并降级您不感兴趣的差异。例如
DifferenceEvaluators.Chain(DifferenceEvaluators.Default,
DifferenceEvaluators.DowngradeDifferencesToEqual(ComparisonType.XML_STANDALONE, ComparisonType.XML_ENCODING))
会吞下差异。
也许您不想只计算差异,还想查看它们的严重程度。编码的差异将是 "similar" 差异,而 standalone 的不同值很关键。