猿问

您将如何比较两个XML文档?

作为进行大量单元测试的基类的一部分,我正在编写一个辅助函数,该函数以递归方式比较一个XmlDocument对象的节点与C#(.NET)中另一个XmlDocument对象的节点。对此的一些要求:

  • 第一个文档是,例如,我想要XML文档的外观。因此,第二个是我要查找差异的节点,它不能包含第一个文档中没有的多余节点。

  • 当发现太多显着差异时,必须抛出异常,并且人为查看该描述应该很容易理解。

  • 子元素的顺序很重要,属性可以是任何顺序。

  • 有些属性是可忽略的。特别是xsi:schemaLocationxmlns:xsi,虽然我希望能够通过在哪些。

  • 名称空间的前缀必须在属性和元素中都匹配。

  • 元素之间的空格无关紧要。

  • 元素将要么有子元素 InnerText,但不能同时。

当我凑在一起时:有没有人写过这样的代码,可以在这里共享吗?

顺便说一句,您将如何称呼第一文档和第二文档?我一直将它们称为“源”和“目标”,但感觉不对,因为是我想要目标的外观,否则我抛出异常。


临摹微笑
浏览 806回答 3
3回答

慕尼黑5688855

比较XML文档很复杂。Google for xmldiff(甚至还有Microsoft解决方案)中的一些工具。我已经通过两种方法解决了这个问题。我使用XSLT对元素和属性进行排序(因为有时它们会以不同的顺序出现,而我对此并不在意),并筛选出我不想比较的属性,然后使用XML :: Diff或XML :: SemanticDiff perl模块,或将每个文档和每个元素和属性都漂亮地打印在单独的一行上,并在结果上使用Unix命令行diff。
随时随地看视频慕课网APP
我要回答