微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 比较XmlDocument以获得相等(内容明智)

如果我想比较一个XMlDocument的内容,它是这样吗?
XmlDocument doc1 = GetDoc1();
XmlDocument doc2 = GetDoc2();

if(doc1 == doc2)
{

}

我不检查它们是否是相同的对象引用,但是如果xml的CONTENTS是相同的.

解决方法

不,XmlDocument不会覆盖Equals()方法的行为,所以实际上只是执行引用的相等性,这在你的例子中将失败,除非文档实际上是同一个对象实例.

如果要比较文档的内容(属性,元素,更改,PI等),您将必须自己实现该逻辑.被警告:这不是微不足道的.

根据您的具体情况,您可能可以从文档中删除所有非必需的空白(这本身可能很棘手),并且它们会比较所生成的xml文本.这不是完美的 – 对于语义相同的文档而言,它失败,但在命名空间被使用和声明的方式上不同,或者某些值是否被转义,元素的顺序等等也是不同的.如前所述,XML比较并不是微不足道的.

您还需要清楚地定义两个XML文档的意思是“相同”.元素或属性顺序是否重要?情况(文本节点)是否重要?你应该忽略多余的CDATA部分吗?处理说明是否计数?完全合格或部分合格的命名空间怎么样?

在任何通用的实现中,你可能想要将这两个文档转换成一些规范的形式(无论是XML还是其他表示),然后比较规范化的内容.

已经存在执行XML差异功能的工具(如Microsoft XML Diff/Patch),您可以利用此功能来识别两个文档之间的差异.据我所知,该工具不以源代码形式发布…所以要在嵌入式应用程序中使用它,您需要脚本化该过程(如果您打算使用该过程,则应首先验证许可条款是否允许使用和重新分发).

编辑:如果您使用.NET 3.5 SP1,请查看@Max Toro’s answer,显然XLinq中有一个可能有帮助的选项.很高兴知道它存在.

原文地址:https://www.jb51.cc/csharp/94258.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐