You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用XmlUnit打印两个XML文档之间的所有差异?

如何打印XmlUnit对比XML的所有差异

嘿,我之前也碰到过这个问题!默认的myDiff.ToString()确实只会输出部分核心差异的摘要,没法展示所有细节。要获取并打印两个XML之间的全部差异,你需要直接遍历XmlUnit返回的差异集合,而不是只依赖ToString()方法。

解决方案代码示例

修改你的代码,通过GetDifferences()方法获取所有差异对象,然后逐个输出详细信息:

string control = "<a><b attr=\"abc\"></b></a>";
string test = "<a><b attr=\"xyz\"></b></a>";
var myDiff = DiffBuilder.Compare(Input.FromString(control))
    .WithTest(Input.FromString(test))
    .Build();

if (myDiff.HasDifferences())
{
    // 遍历所有差异并打印细节
    var differences = myDiff.GetDifferences();
    foreach (var diff in differences)
    {
        Console.WriteLine($"[差异类型] {diff.Type}");
        Console.WriteLine($"[差异描述] {diff.Description}");
        Console.WriteLine($"[控制XML节点] {diff.ControlDetails.Target}");
        Console.WriteLine($"[测试XML节点] {diff.TestDetails.Target}");
        Console.WriteLine("------------------------");
    }
    Assert.Fail($"共发现 {differences.Count()} 处XML差异");
}

关键说明

  • GetDifferences()方法会返回一个包含所有Difference对象的集合,每个对象都存储了差异的完整信息:
    • Type:标记差异的类别(比如属性值不匹配、节点缺失、文本内容不同等)
    • Description:差异的人类可读描述
    • ControlDetails.Target/TestDetails.Target:分别指向控制XML和测试XML中产生差异的具体节点
  • 这种方式能确保你不会遗漏任何细微差异,比默认的ToString()输出全面得多。

内容的提问来源于stack exchange,提问作者Frederic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:10:21