我想比较XML文档。有些文档大小超过50k。我正在比较OuterXml。这种方法是否高效?是否有更高效的方法?
仅仅比较XML的文本表示并不能产生有效的结果-看看这个例子:
<node x="1" y="2" />
并且
<node y="2" x="1" />
就 XML 处理而言,节点上属性的顺序无关紧要,因此它们在这方面是相同的,但当你比较文本时,你会标记它们有差异。
Microsoft 曾经在 GotDotNet 上拥有一个名为 XmlDiff 的工具,但我不确定它是否仍然可用......
更新
XmlDiff 似乎仍然可用 - 查看此 下载链接,以及 MSDN 上的 "在应用程序中使用 XML Diff 和 Patch 工具" 链接。
Marc
取决于您想进行什么样的比较。
例如,如果您只想比较两个文件中的内容并获得真/假状态,则建议为要比较的两个文件使用XmlReader,然后解析节点。一旦遇到差异,您就可以停止解析。
这与使用XML文档不同,在其中您必须将整个文档读入内存,获取字符串表示形式并比较字符串。(对于较小的文件大小无所谓)
两个XML文档可能在语义上是等效的,但结构可能不同。(在这种情况下,您的比较必须更加智能)。
如果您打算在比较失败/成功时修改源文档,则首选DOM方式(XmlDocument类及其API)。
还有一个开源项目:http://diffxml.sourceforge.net/
我曾经使用过微软的XmlDiff和这个框架。我认为微软的XmlDiff具有更多的比较功能,所以现在我使用它。但是如果你想使用开源的话,DiffXml是一个不错的框架。