Bla*_*man 14 c# xml xmldocument equality
如果我想比较XMlDocument的内容,它是这样的吗?
XmlDocument doc1 = GetDoc1();
XmlDocument doc2 = GetDoc2();
if(doc1 == doc2)
{
}
Run Code Online (Sandbox Code Playgroud)
我不检查它们是否是相同的对象引用,但是如果xml的CONTENTS是相同的.
Max*_*oro 34
在XLinq API上尝试DeepEquals方法.
XDocument doc1 = GetDoc1();
XDocument doc2 = GetDoc2();
if(XNode.DeepEquals(doc1, doc2))
{
}
Run Code Online (Sandbox Code Playgroud)
LBu*_*kin 11
不.XmlDocument不会覆盖Equals()方法的行为,所以它实际上只是执行引用相等 - 这将在您的示例中失败,除非文档实际上是相同的对象实例.
如果要比较文档的内容(属性,元素,通信,PI等),您必须自己实现该逻辑. 请注意:这不是微不足道的.
根据您的具体情况,您可以从文档中删除所有非必要的空格(这本身可能很棘手),并比较生成的xml文本.这并不完美 - 它对于语义相同的文档而言是失败的,但在命名空间的使用和声明方式,或者某些值是否被转义,元素的顺序等方面都有所不同.正如我之前所说,XML比较并非无足轻重.
您还需要明确定义两个XML文档"相同"的含义.元素或属性排序是否重要?案例(在文本节点中)是否重要?你应该忽略多余的CDATA部分吗?处理指令是否重要?完全限定和部分限定的命名空间怎么样?
在任何通用实现中,您可能希望将两个文档转换为某种规范形式(无论是XML还是其他表示形式),然后比较规范化的内容.
已经存在执行XML差异的工具,如Microsoft XML Diff/Patch,您可以利用它来识别两个文档之间的差异.据我所知,该工具不是以源代码形式分发的......因此,要在嵌入式应用程序中使用它,您需要对该过程进行编写脚本(如果您打算使用它,则应首先验证许可条款是否允许其使用和重新分发).
编辑: 如果您使用的是.NET 3.5 SP1,请查看@Max Toro的答案,因为显然XLinq中有一个可能有用的选项.很高兴知道它存在.
一种简单的方法可以比较OuterXml.
var a = new XmlDocument();
var b = new XmlDocument();
a.LoadXml("<root foo='bar' />");
b.LoadXml("<root foo='bar'/>");
Debug.Assert(a.OuterXml == b.OuterXml);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11070 次 |
| 最近记录: |