作为进行大量单元测试的基类的一部分,我正在编写一个辅助函数,该函数以递归方式比较一个XmlDocument对象的节点与C#(.NET)中另一个XmlDocument对象的节点。对此的一些要求:第一个文档是源,例如,我想要XML文档的外观。因此,第二个是我要查找差异的节点,它不能包含第一个文档中没有的多余节点。当发现太多显着差异时,必须抛出异常,并且人为查看该描述应该很容易理解。子元素的顺序很重要,属性可以是任何顺序。有些属性是可忽略的。特别是xsi:schemaLocation和xmlns:xsi,虽然我希望能够通过在哪些。名称空间的前缀必须在属性和元素中都匹配。元素之间的空格无关紧要。元素将要么有子元素或 InnerText,但不能同时。当我凑在一起时:有没有人写过这样的代码,可以在这里共享吗?顺便说一句,您将如何称呼第一文档和第二文档?我一直将它们称为“源”和“目标”,但感觉不对,因为源是我想要目标的外观,否则我抛出异常。
3 回答
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
比较XML文档很复杂。Google for xmldiff(甚至还有Microsoft解决方案)中的一些工具。我已经通过两种方法解决了这个问题。我使用XSLT对元素和属性进行排序(因为有时它们会以不同的顺序出现,而我对此并不在意),并筛选出我不想比较的属性,然后使用XML :: Diff或XML :: SemanticDiff perl模块,或将每个文档和每个元素和属性都漂亮地打印在单独的一行上,并在结果上使用Unix命令行diff。
- 3 回答
- 0 关注
- 805 浏览
添加回答
举报
0/150
提交
取消