我想比较两个xml文档是否相等。我的一份文件有自闭标签,另一份则没有。
XNode node = XDocument.Parse("<Root/>");
XNode node2 = XDocument.Parse("<Root></Root>");
bool result = XNode.DeepEquals(node, node2);
Console.WriteLine(result);我假设"<Root/>"等同于"<Root></Root>",但是DeepEquals说它们不是(返回false)。
我如何比较这两份文件是相等的?
ps:不受XNode约束。使用XmlDocument的解决方案也很受欢迎。
发布于 2017-05-23 17:59:41
为了比较这两份文件是否相等,应在一定程度上加以规范。
Eric写了几篇博客文章,详细介绍了高级normalization1和简单的normalization2。
为了修复空标记和自结束标记,后一篇文章更相关。
从该条中:
静态XElement CloneElement(XElement元素){返回新的XElement(element.Name,element.Attributes(),element.Nodes().Select(n => { XElement e=n作为XElement;if (e = null)返回CloneElement(e);返回n;}) )
此代码将递归地将元素及其后缀复制为规范化形式(使用默认的XElement构造)。这包括将空标签规范化为自结束标记。然后,比较这些文档将如预期的那样工作。
考虑以下XML:
<Foo>
<Bar/>
<Root/>
</Foo>和
<Foo>
<Bar></Bar>
<Root></Root>
</Foo>在对每个元素使用CloneElement之后,它们将是相等的。
var node = XElement.Parse("<Foo><Bar/><Root/></Foo>");
var node2 = XElement.Parse("<Foo><Bar></Bar><Root></Root></Foo>");
XElement.DeepEquals(node, node2); // False
XElement.DeepEquals(CloneElement(node), CloneElement(node2)); // Truehttps://stackoverflow.com/questions/44141289
复制相似问题