【发布时间】:2010-09-15 03:22:12
【问题描述】:
作为一些扩展单元测试的基类的一部分,我正在编写一个辅助函数,它递归地将一个 XmlDocument 对象的节点与 C# (.NET) 中的另一个对象进行比较。对此的一些要求:
- 第一个文档是来源,例如我希望 XML 文档看起来像什么。因此,第二个是我想要找到差异的那个,它不能包含不在第一个文档中的 extra 节点。
- 当发现太多显着差异时必须抛出异常,并且应该很容易通过人类的描述来理解。
- 子元素顺序很重要,属性可以是任意顺序。
- 有些属性是可以忽略的;特别是
xsi:schemaLocation和xmlns:xsi,虽然我希望能够传递哪些是。 - 命名空间的前缀必须在属性和元素中匹配。
- 元素之间的空格无关紧要。
- 元素将要么有子元素或
InnerText,但不能同时拥有。
当我一起废弃一些东西时:有人写过这样的代码吗?可以在这里分享吗?
顺便说一句,你会怎么称呼第一个和第二个文件?我一直将它们称为“源”和“目标”,但感觉不对,因为 源 是我希望 目标 看起来的样子,否则我会抛出一个例外。
【问题讨论】:
-
节点可以相同但声明顺序不同吗?
-
不,节点的顺序必须相同。除了作为文档本身的要求之外,它还使区分变得更简单(只需枚举孩子并一对一检查)。
-
> 属性可以按任何顺序排列 好东西,因为根据定义,属性是无序的。
-
我将文档称为“基线”和“测试”。
-
称它们为“实际”和“预期”(是的,我知道我已经晚了 13 年)。
标签: c# .net xml compare xmldocument