【发布时间】:2015-07-06 03:22:09
【问题描述】:
我正在 PowerShell 中构建一个比较引擎脚本,我需要能够比较的内容之一是 XML 文件。当我使用本机 PowerShell 比较对象时,它返回 0 个差异,但如果我抓取外部 XML(文本表示)和差异,我确实会得到差异。不幸的是,这会将所有内容都放在一个长字符串中,因此没有用。
然后我尝试使用 Microsoft 的 XmlDiffPatch 库,但是如果我使用示例程序或 PowerShell 中的库,我的 2 个 XML 文件将失败并出现异常:
$d.Compare("c:\scripts\ps\ref.xml", "c:\scripts\ps\tgt.xml", $false)
Exception calling "Compare" with "3" argument(s): "Length cannot be less than zero.
Parameter name: length"
At line:1 char:1
+ $d.Compare("c:\scripts\ps\ref.xml", "c:\scripts\ps\tgt.xml", $false)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentOutOfRangeException
没有访问这个库的源代码,我不知道除了错误之外发生了什么。这 2 个 XML 在 IE 中的解析很好,所以我知道它们是有效的 XML。
有没有其他人见过这个?你是怎么解决的?
【问题讨论】:
-
抱歉,$d 是 XmlDiffPatch 类的实例化,错过了输入中的那一行。
-
我错过了您的评论,我会尝试一下,最后我编写了自己的 xml 差异解析器。它为 xml 文档中的每个元素创建一个 xpath,然后使用 PS 内置比较来检查每个元素并区分每个元素的属性。我还创建了一个 XSL,它将一个“diff”对象(转换为 xml)转换为一个漂亮的 html 页面,该页面突出显示正在比较的各种对象中的增量。
标签: c# xml powershell xmldiff