【问题标题】:Case-insensitive XML comparison不区分大小写的 XML 比较
【发布时间】:2012-09-10 17:51:16
【问题描述】:

我有单元测试解决方案,它基本上比较了两个 diff 软件生成的两个 xml。

问题是一个 xml 有 2 个值 n 小写,而另一个则是大写,如下所示。

第一

<IsMirrored>False</IsMirrored>
<IsVariable>True</IsVariable>

第二次

<IsMirrored>false</IsMirrored>
<IsVariable>true</IsVariable>

我用这个方法比较xml:

Assert.AreEqual(originalDoc.OuterXml, newDoc.OuterXml);

但由于大小写问题,比较值时返回 false。我怎么会忽略这个案例问题,它只比较价值?

编辑:又一期

另一个问题是:如果有一个空元素:

第一个:

<LinkedObjectName></LinkedObjectName>

第二个:

<LinkedObjectName />

如果我执行 Assert.AreEqual,它将逐个字符地进行检查,并在此处中断。

我该如何处理?

【问题讨论】:

    标签: .net xml uppercase lowercase


    【解决方案1】:

    不要使用Assert.AreEqual,使用Assert.IsTrueString.Equals

    Assert.IsTrue(
        String.Equals(
            originalDoc.OuterXml, 
            newDoc.OuterXml, 
            StringComparison.CurrentCultureIgnoreCase))
    

    编辑:

    要对两个 XML 文档进行更可靠的比较,您可以尝试使用 Microsoft 的 XML Diff and Patch Tool。即使在简单的字符串比较失败的情况下(例如节点或属性的不同排序),该工具也会尝试确定您的 XML 文档的内容是否相同。

    【讨论】:

    • 是的,我看到了,现在它一直在处理。谢谢。但是我的问题仍然是,如果有一个空元素,我又发现了一件事情:第一个: 第二个: 如果我执行 Assert.AreEqual,它将逐个字符地进行检查并且它会中断这里。我该如何处理?
    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2013-03-11
    • 2020-03-28
    相关资源
    最近更新 更多