加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:54:26 所属栏目:百科 来源:网络整理
导读:如果我想比较一个XMlDocument的内容,它是这样吗? XmlDocument doc1 = GetDoc1();XmlDocument doc2 = GetDoc2();if(doc1 == doc2){} 我不检查它们是否是相同的对象引用,但是如果xml的CONTENTS是相同的. 解决方法 不,XmlDocument不会覆盖Equals()方法的行为,
如果我想比较一个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中有一个可能有帮助的选项.很高兴知道它存在.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读